有一个包含单列数字的文件:
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”,它不像我期望的那样工作。
答案 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中读取的所有行。