我有一个包含四列的制表符分隔文件。我想 grep 查找第 1 列中具有特定模式的行,其中显示 apple中号的氮。我只想提取第一个数字与第二个数字匹配的行,或者第一个数字比第二个数字小一的行。在下面的示例中,第 2、3 和 5 行(不包括标题行)符合该模式。
Col1 col2 col3 col4
apple (XY_012345, apple 6 of 10) 1 12228 12612
apple (XY_678901, apple 5 of 6) 1 12722 13220
apple (XY_234567, apple 2 of 2) 1 18437 24737
apple (XY_890123, apple 8 of 30) 1 24892 29269
apple (XY_456789, apple 12 of 12) 1 35175 35276
答案1
GNU awk 中类似的事情:
$ gawk 'match($0, /([0-9]+) of ([0-9]+)/, a) && (a[2] == a[1] || a[2] == a[1]+1)' file
apple (XY_678901, apple 5 of 6) 1 12722 13220
apple (XY_234567, apple 2 of 2) 1 18437 24737
apple (XY_456789, apple 12 of 12) 1 35175 35276
答案2
perl -ne 'print if /(\d+) of (\d+)/ && ($1 == $2 or $1 == ($2 - 1))' < input
这是一个“单行”perl 脚本,它循环输入您提供的输入并仅在以下情况下打印行:
- 匹配并捕获由文本“
of
”分隔的两个数字后, - 第一个数字等于第二个数字或比第二个数字小一个