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