web-dev-qa-db-ja.com

特定の列をgrepコマンドで一致させる

特定の列を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 2列目。 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コマンドと一致させるにはどうすればよいですか?

7
upendra

これを試してください:

$ awk '$2 == 866' test.txt

追加する必要はありません{print}awkのデフォルトの動作は、true条件で印刷することです。

grep を使用:

$ grep -P '^\S+\s+866\b' *

しかし awk はファイル名も出力でき、- grep よりもはるかに堅牢です:

$ awk '$2 == 866{print FILENAME":"$0; nextfile}' *
17
Gilles Quenot

私の場合、フィールドセパレータはスペースではなくカンマです。だから私はこれを追加する必要があります、そうでなければそれは私にとってはうまくいきません(Onbuntu 18.04.1)。

awk -F ', ' '$2 == 866' test.txt
1
Harry