如果满足条件,则打印上一行

Ram*_*Ram 8 linux awk grep

我想grep一个单词,然后找到该行中的第二列,并检查它是否大于一个值.是的,我想打印上一行.

例如:

输入文件

AAAAAAAAAAAAA
BB  2
CCCCCCCCCCCCC
BB 0.1
Run Code Online (Sandbox Code Playgroud)

产量

AAAAAAAAAAAAA
Run Code Online (Sandbox Code Playgroud)

现在,我想搜索BB,如果该行中的第二列(2或0.1)大于1,我想打印上一行.

有人可以用grep和awk帮我吗?谢谢.任何其他建议也欢迎.谢谢.

fed*_*qui 17

这可以是一种方式:

$ awk '$1=="BB" && $2>1 {print f} {f=$1}' file
AAAAAAAAAAAAA
Run Code Online (Sandbox Code Playgroud)

说明

  • $1=="BB" && $2>1 {print f}如果第一个字段是精确的BB并且第二个字段大于1,则打印f一个存储的值.
  • {f=$1}存储当前行f,以便在读取下一行时可以访问它.


gle*_*man 6

另一个选择:如果条件匹配,则反转文件并打印下一行:

tac file | awk '$1 == "BB" && $2 > 1 {getline; print}' | tac
Run Code Online (Sandbox Code Playgroud)