0

有一个单列数字的文件:

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”,它不像我预期的那样工作。

4

2 回答 2

1

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

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

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

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

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

于 2013-10-01T15:54:15.530 回答
0

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

于 2013-10-01T15:51:19.913 回答