awk便利ですね。便利すぎてなんでもawk使おうとするんですが、範囲を広げるともどかしいことも増えてきます。
今回は、標準入力とは別に「IDとか名前とかキーワードとかの一覧が並んでいるテキストファイル」を読み込んで、どの行かと標準入力の1番目がマッチしたらその行を返すというスクリプトをご紹介します。
ロジックが簡単なので1度理解してしまえば、コピペでスクリプト貼り付けて一分で抽出始められます!
awkのバージョンによっては動かないかもしれません。試したのは、WindowsのCygwin 64bit版のGNU Awk 4.1.0です。
sample1.awk
#!/bin/awk -f
# cat input.txt | awk -F, -v file=keyword.txt -f sample1.awk
# 改行はLF
# 日本語の場合文字コードはUTF8
BEGIN {
DATA="|";
CAT = "cat " file;
while ((CAT | getline) > 0) {
DATA = DATA "" $0 "|";
}
close(CAT);
}
$1!=""{
ITEM = "|" $1 "|";
if (index(DATA, ITEM) >0) {
print $0;
}
}
keyword.txt
test1
test2
test3
input.txt
test1
test12
test123
やってることは単純に、キーワード一覧を、keyword.txtを一行ずつ読み込んで、|test1|test2|test3|という文字列に変換して、標準入力の1番目がマッチすればtrueと見なすということをやっています。
それでは充実したawkライフをお送りください。