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

问题描述 投票:7回答:3

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

例如:

输入文件

AAAAAAAAAAAAA
BB  2
CCCCCCCCCCCCC
BB 0.1

产量

AAAAAAAAAAAAA

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

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

linux awk grep
3个回答
16
投票

这可以是一种方式:

$ awk '$1=="BB" && $2>1 {print f} {f=$1}' file
AAAAAAAAAAAAA

Explanation

  • $1=="BB" && $2>1 {print f}如果第一个字段恰好是BB而第二个字段比1大,那么打印f,一个存储值。
  • {f=$1}将当前行存储在f中,以便在阅读下一行时可以访问它。

4
投票

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

tac file | awk '$1 == "BB" && $2 > 1 {getline; print}' | tac

0
投票

结合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)

© www.soinside.com 2019 - 2024. All rights reserved.