LoginSignup
9
11

More than 5 years have passed since last update.

awkで別ファイルのリストとマッチしている行のみ抽出させる

Last updated at Posted at 2014-12-11

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ライフをお送りください。

9
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11