grepでファイルのレコードを絞り込む

データの絞り込みに使えます。

以下のデータファイルを用意して確認します。


$ cat ./data.txt
OK ID_A AAA.txt 1
NG ID_B BBB.txt 2
NG ID_C CCC.txt 3
OK ID_D DDD.txt 3
OK ID_E EEE.txt 3

任意のレコードを抽出 XXの存在するレコード

OKの存在する行を取得

$ cat ./data.txt | grep "OK"
OK ID_A AAA.txt 1
OK ID_D DDD.txt 3
OK ID_E EEE.txt 3

任意のレコードを抽出 XXの存在しないレコード

OKの存在しない行を取得

$ cat ./data.txt | grep -v "OK"
NG ID_B BBB.txt 2
NG ID_C CCC.txt 3

任意のレコードを抽出 XXの存在するレコードの行数

OKの行数を取得

$ cat ./data.txt | grep "OK" | wc -l
3

任意のレコードを抽出 XXの存在しないレコードの行数

OK以外の行数を取得

$ cat ./data.txt | grep -v "OK" | wc -l
2

複数の条件(AND)で絞り込み

※注意データの作りにも左右されると思います

$ cat ./dataB.txt
OK ID_A AAA.txt 1
NG ID_B BBB.txt 2
OK ID_B BBB.txt 2
OK ID_B BBB.txt 2
NG ID_C CCC.txt 3
OK ID_D DDD.txt 3
OK ID_E EEE.txt 3

以下のようにパイプで繋げれば絞りこむことが出来ます。

$ cat ./dataB.txt | grep ID_B
NG ID_B BBB.txt 2
OK ID_B BBB.txt 2
OK ID_B BBB.txt 2

$ cat ./dataB.txt | grep ID_B | grep NG
NG ID_B BBB.txt 2

複数条件(OR)で絞り込み

※注意データの作りにも左右されると思います

ORの場合この書き方が出来るので、AND条件のケースも何かオプション無いかと思ったのですが…無さそうです。

$ cat ./dataB.txt | grep -e ID_B -e NG
NG ID_B BBB.txt 2
OK ID_B BBB.txt 2
OK ID_B BBB.txt 2
NG ID_C CCC.txt 3


この記事が気に入ったらサポートをしてみませんか?