Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用grep命令匹配特定列_Linux_Grep_Match_Awk - Fatal编程技术网

Linux 使用grep命令匹配特定列

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

我无法将特定列与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       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