带变量的AWK NR查找提供额外输出

时间:2013-12-04 22:19:39

标签: awk records

我有两个文件。一个变量为字段1.我使用它来查找另一个文件中的值,该文件将变量作为记录,然后是另一个包含我想要的信息的记录。即我正在查找1找到A或3来找到C.

1
A
2
B
3
C

我应该可以使用以下行轻松地使用awk。

awk '{if ($1=="3") A=NR}{ if (NR==(A+1)) print $0}' FILEIN

输出应该是

C

而是我得到第一行的输出,然后是正确的值。即

1
C

如果我只是输入NR值而不是分配变量,它只给我我想要的数据。如果我放(A + 2)它给我第2行和我想要的线,依此类推。关于为什么会发生这种情况的任何想法

1 个答案:

答案 0 :(得分:2)

作为庇护所评论,开始时A没有按值分配,awk会占用0,所以0+1, 0+2 ...你明白为什么你会得到意想不到的路线。

如果我理解您的要求,您不必根据自己的需要与NR一起玩。

试试这一行:

awk '$1=="3"{getline;print;exit}' file

用你的例子测试:

kent$  echo "1
A
2
B
3
C"|awk '$1=="3"{getline;print;exit}'
C

如果您只是想在代码中解决问题,请添加&&A,例如:

awk '{if ($1=="3") A=NR}{ if (NR==(A+1)&&A) print $0}'

你的行可以缩短为:

awk '$1=="3"{A=NR}NR==(A+1)&&A'