Awk:如果NR在阵列中,则打印字段

时间:2013-10-01 15:39:13

标签: awk

有一个包含单列数字的文件:

12
15
24
220

还有第二个包含许多字段的文件。我正在尝试做一个非常简单的事情:为第一个文件中列出数字的所有行打印大文件的第一列(第12,15行等)。

我想出了单行:

awk 'FNR==NR{array[NR]=$1;next}(NR in array){print $1}' lines.txt input.txt  > output.txt

但它给了我一个空的输出文件,我不知道为什么,不介意一些帮助。 我想这是“数组中的NR”,它不像我期望的那样工作。

2 个答案:

答案 0 :(得分:2)

NR是总输入行号。在第二个文件中,NR从第一个文件的最后一个行号加一个开始,并从那里开始增加。第二个条件永远不会匹配。

我猜你正在寻找这样的东西:

awk 'FNR==NR{array[$1]=1;next}
    (FNR in array){print $1}' lines.txt input.txt  > output.txt

显然,FNR是当前文件中的行号。

另请注意,我们正在将第一个文件中的数字读入数组,而不是第一个文件中的行号。

答案 1 :(得分:0)

您必须使用FNR in array,因为FNR是当前文件中的行号,并不计算已在lines.txt中读取的所有行。