如果满足某些awk条件,我有一个要粘贴到主文件(bar)的文件列表.
for foo in *; do if awk '*condition* {exit 1}' $foo then : else paste $foo > bar fi done
但是,看起来只有最后粘贴的文件在栏中.不应该每次都粘贴添加新列到bar,而不是完全覆盖所有数据?
File1 File2 Expected_Output Actual_Output 1 4 1 NaN 1 4 1 NaN 1 NaN 2 5 2 7 2 5 2 7 2 7 3 6 3 8 3 6 3 8 3 8
Fred.. 8
您的paste
命令会bar
在循环中的每次迭代时覆盖文件,这说明最后您只有最后一个文件.
declare -a FILES=() for foo in *; do if awk '*condition* {exit 1}' $foo then : else FILES+=("$foo") fi done paste "${FILES[@]}" > bar
此代码在名为的数组中累积与您的条件匹配的所有文件名FILES
,并且paste
只调用一次,将所有文件名扩展为单独的引用参数(这是做什么"${FILES[@]}"
)并将输出重定向到bar
文件.
此外,您可以使用以下命令替换整个if/then/else块:
awk '*condition* {exit 1}' "$foo" || FILES+=("$foo")
该||
表达的条件,因为击的执行逻辑运算符的惰性评估,该声明的权利,如果只执行awk
返回一个非零返回代码.
请注意我引用"$foo"
(当传递给它awk
)时,文件名将包含特殊字符.
您的paste
命令会bar
在循环中的每次迭代时覆盖文件,这说明最后您只有最后一个文件.
declare -a FILES=() for foo in *; do if awk '*condition* {exit 1}' $foo then : else FILES+=("$foo") fi done paste "${FILES[@]}" > bar
此代码在名为的数组中累积与您的条件匹配的所有文件名FILES
,并且paste
只调用一次,将所有文件名扩展为单独的引用参数(这是做什么"${FILES[@]}"
)并将输出重定向到bar
文件.
此外,您可以使用以下命令替换整个if/then/else块:
awk '*condition* {exit 1}' "$foo" || FILES+=("$foo")
该||
表达的条件,因为击的执行逻辑运算符的惰性评估,该声明的权利,如果只执行awk
返回一个非零返回代码.
请注意我引用"$foo"
(当传递给它awk
)时,文件名将包含特殊字符.