Linux 使用grep命令匹配特定列
我无法将特定列与grep命令匹配。我有一个这样的测试文件(test.txt)Linux 使用grep命令匹配特定列,linux,grep,match,awk,Linux,Grep,Match,Awk,我无法将特定列与grep命令匹配。我有一个这样的测试文件(test.txt) Bra001325 835 T 13 c$c$c$c$c$cccccCcc !!!!!68886676 Bra001325 836 C 8 ,,,,,.,, 68886676 Bra001325 841 A 6 ,$,.,,. BJJJJE Bra001325
Bra001325 835 T 13 c$c$c$c$c$cccccCcc !!!!!68886676
Bra001325 836 C 8 ,,,,,.,, 68886676
Bra001325 841 A 6 ,$,.,,. BJJJJE
Bra001325 866 C 2 ,. HJ
我想提取第二列中所有编号为866的行。当我使用grep
命令时,我会得到包含该数字的所有行
grep "866" test.txt
Bra001325 835 T 13 c$c$c$c$c$cccccCcc !!!!!68886676
Bra001325 836 C 8 ,,,,,.,, 68886676
Bra001325 866 C 2 ,. HJ
如何使用grep命令匹配特定列 尝试这样做:
$ awk '$2 == 866' test.txt
无需添加{print}
,awk
的默认行为是在true
条件下打印
与:
但也可以打印文件名&比这里更加健壮:
在我的例子中,字段分隔符不是空格而是逗号。所以我必须添加这个,否则它对我不起作用(在ubuntu 18.04.1上)
谢谢我想知道有没有办法处理
grep
?我这样问是因为我有很多文件,当我尝试使用awk
时,它只打印与这些文件中的模式匹配的行。但是,使用grep
您将获得文件名,后跟与模式匹配的行。更正了grepOh cool中的键入错误。我想我应该看看那个打字错误。可能这并不重要,但我想匹配866
,而不是836
,grep
将失败,如果866
在除字段2以外的行中有空格awk
在这里是最好的。@MohitVerma awk默认使用空格,若要更改为使用逗号,请使用“awk-F”,但在使用诸如“|^$:”等shell有效字符时要小心。最好使用单引号,如“awk-F”|”
$ grep -P '^\S+\s+866\b' *
$ awk '$2 == 866{print FILENAME":"$0; nextfile}' *
awk -F ', ' '$2 == 866' test.txt