-1

我正在使用 awk,并希望将任意数量的文本文件(参数)发送到我的脚本中,并为每个输入文件“打印一些东西”。

我在这里找到了脚本

并将脚本修改成这个

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. 谢谢 =)

4

3 回答 3

1

如果要将每个文件的第三列 $3 打印到单个输出文件中,可以使用如下内容:

awk '{ print $3 }' file1 [file2 .. filen] > output3

如果要打印每个文件的第三行:

awk 'FNR == 3' file1 [file2 .. filen] > output3

当然,您可以使用glob来匹配您的文件:

awk '{ print $3 }' common_pattern* > output3
于 2011-06-30T16:51:31.573 回答
0

而不是将nfiles=10其添加到您的 awk 脚本作为第一个操作。

FNR==1 {nfiles++}
于 2011-06-30T17:58:10.613 回答
0

用于计算添加的文件数:

awk 'BEGIN {nfiles = ARGC-1}
...
}' "$@"
于 2013-04-26T09:00:39.547 回答