GNU/Linux >> Linux の 問題 >  >> Linux

最初の列のデータを検索するgrep

awk を使用します。 cat myfile | awk '{print $1}' | grep query


awk が使える場合 、これを試してください:

text.txt
--------
Product   Cost
Abc....def  10
Abc.def     20
ajsk,,lll   04

With only awk:
awk '$1 ~ /^Abc.*def$/ { SUM += $2 } END { print SUM } ' test.txt
Result: 30

With grep and awk:
grep "^Abc.*def.*\d*$" test.txt | awk '{SUM += $2} END {print SUM}'
Result: 30

説明:

  • awk 各行を読み取り、最初の列を正規表現 (regex) と照合します
  • 最初の列は Abc で始まり、その後に何か (0 回以上) が続き、def で終わる必要があります
  • そのような一致が見つかった場合、2 番目の列を SUM 変数に追加します
  • すべての行を読み取った後、変数を出力します

grep は、Abc で始まり、その後に何かが続き、def が続き、その後に何かが続き、最後に数字 (0 回以上) が続く各行を抽出します。これらの行は awk にフィード/パイプされます。 awk は、受信した行ごとに SUM をインクリメントするだけです。受信したすべての行を読み取った後、SUM 変数を出力します。


Linux
  1. パターンに一致する特定のファイルを検索する方法は?

  2. 3番目の列を最後の列に印刷する方法は?

  3. 複数行検索用の正規表現 (grep) が必要

  1. 列値条件で awk を使用する

  2. Linuxでデータファイルから最初の列(実際には行名)を削除するには?

  3. grep と awk の使用

  1. 正規表現とgrep:データフローとビルディングブロック

  2. Sed、Awk、またはGrepを使用したマルチラインパターンマッチ?

  3. awk を使用して、別の列の値に基づいて列の値を合計する