我想grep一个单词,然后找到该行中的第二列,并检查它是否大于一个值。是的,我想打印上一行。
例如:
输入文件
AAAAAAAAAAAAA
BB 2
CCCCCCCCCCCCC
BB 0.1
产量
AAAAAAAAAAAAA
现在,我想搜索BB,如果该行中的第二列(2或0.1)大于1,我想打印上一行。
有人可以用grep和awk帮我吗?谢谢。任何其他建议也欢迎。谢谢。
这可以是一种方式:
$ awk '$1=="BB" && $2>1 {print f} {f=$1}' file
AAAAAAAAAAAAA
$1=="BB" && $2>1 {print f}
如果第一个字段恰好是BB
而第二个字段比1
大,那么打印f
,一个存储值。{f=$1}
将当前行存储在f
中,以便在阅读下一行时可以访问它。另一个选项:如果条件匹配,则反转文件并打印下一行:
tac file | awk '$1 == "BB" && $2 > 1 {getline; print}' | tac
结合sed和awk你得到这个:sed 'N;s/\n/ /' < file |awk '$3>1{print $1}'
sed 'N;s/\n/ /
:合并第1行和第2行并用空格替换下一行char
awk '$3>1{print $1}'
:打印$ 1(第1列),如果$ 3(第3列的值> 1)