% cat a.txt 12 学校 13 給食 20 六本木 58 恵比寿 % cat b.txt school SCHOOL G 12 六本木 ROPPONGI R 20 恵比寿 EBISU E 58 % join -1 1 -2 4 a.txt b.txt 12 学校 school SCHOOL G 20 六本木 六本木 ROPPONGI R 58 恵比寿 恵比寿 EBISU E
% join -1 2 -2 1 a.txt b.txt (うまくいかない) % sort -k 2 a.txt > a2.txt (漢字の部分をソート) % cat a2.txt 20 六本木 12 学校 58 恵比寿 13 給食 (b.txt の第1フィールドはすでにソートされているので処理不要) % join -1 2 -2 1 a2.txt b.txt 六本木 20 ROPPONGI R 20 恵比寿 58 EBISU E 58
% perl -anle 'BEGIN{open(h,shift);while(<h>){chomp;split; $d{$_[1]}=$_[0]}}print"$d{$F[0]}\t$_"if$d{$F[0]}' a.txt b.txt 20 六本木 ROPPONGI R 20 58 恵比寿 EBISU E 58
% cat c.txt 六本木から恵比寿まで行った。 東京は良い天気です。 学校はどこかな。 給食を食べた。 コーヒーを飲んだ。 % cat a.txt 12 学校 13 給食 20 六本木 58 恵比寿 % perl -anle 'BEGIN{open(h,shift);while(<h>){chomp;split;$d{$_[1]}=$_[0]}; $p=join("|",keys%d)}if(/($p)/){print"HIT:$1($d{$1})\t$_"}' a.txt c.txt HIT:六本木(20) 六本木から恵比寿まで行った。 HIT:学校(12) 学校はどこかな。 HIT:給食(13) 給食を食べた。