我使用awk,并希望将任意数量的文本文件(参数)发送到我的脚本中,并为每个输入文件“打印一些东西”。
我找到了脚本here
并将脚本修改为此
awk -v nfiles="10" 'NR==FNR{a[$0]++;next}
$0 in a {a[$0]++; next}
{b[$0]++}
END{
for(i in a){
if(a[i]==nfiles) {
print i > "output1"
}
else if(a[i]==1) {
print i > "output3"
}
}
for(i in b){
if(b[i]==nfiles-1) {
print i > "output2"
}
}
}' "$@"
问题是我在nfiles="10"
写什么,因为它应该是任意数量的文本参数?
此外,我完全不理解这个脚本,它只执行本节
else if(a[i]==1) {
print i > "output3"
}
只打印出来自file1.txt的信息。为什么不执行剩下的工作呢?如果我想将第3行($3
)中的所有文件从所有文件打印到output3
怎么办?
谢谢=)
答案 0 :(得分:1)
如果要将每个文件的第3列$ 3打印到单个输出文件中, 你可以使用这样的东西:
awk '{ print $3 }' file1 [file2 .. filen] > output3
如果要打印每个文件的第三行:
awk 'FNR == 3' file1 [file2 .. filen] > output3
当然,您可以使用 glob 来匹配您的文件:
awk '{ print $3 }' common_pattern* > output3
答案 1 :(得分:0)
而不是传递nfiles=10
,而不是将其作为第一个动作添加到您的awk脚本中。
FNR==1 {nfiles++}
答案 2 :(得分:0)
用于计算添加的文件数:
awk 'BEGIN {nfiles = ARGC-1}
...
}' "$@"