こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

回答受付中の質問

リストファイルに一致する個数のカウントについて

以下にリストファイルと、インプットファイルがあります。
リストファイルのそれぞれにインプットファイルの中で何個一致するかを出力させたいです。
目的にかなうawkや perlなどのスクリプトを教えてほしいです。

list.txt
a
b
c
d
・・

input.txt
1 a b c
2 a d
3
4 b c
・・

output.txt
a 2
b 2
c 2
d 1
・・

投稿日時 - 2018-10-01 12:48:37

QNo.9543172

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

#2 です。

input.txt
1 a b c
2 a d a
3 ad
4 b c

awk 'FNR==NR{a[o[n++]=$1]=0;next} {for (i=1;i<=NF;i++)if ($i in a)a[$i]++} END{for (i=0;i<n;i++)print o[i],a[o[i]]}' list.txt input.txt
a 3
b 2
c 2
d 1

少し説明しとくと、a[] が list.txt の連想配列、o[] はその順序、n は行数
最初の FNR ブロックが list.txt に、次の {} が input.txt (以降複数ファイルでも) に対応、NF までの各項目ごとに a[] に一致する単語のカウント

投稿日時 - 2018-10-02 17:32:33

お礼

ありがとうございました。できました

投稿日時 - 2018-10-03 11:11:06

ANo.2

特に明記されてないけど、空白区切りの完全一致ということなのかな?
それと
2 a d a
とかなってたら a のカウントは 2? それとも 1?

投稿日時 - 2018-10-01 22:10:37

補足

カウントするようにしたいです。

投稿日時 - 2018-10-02 14:47:43

ANo.1

あなたが自分で出来るようにアドバイスして欲しいのではなくて、あなたの代わりに無料でやれという事でしょうか。

投稿日時 - 2018-10-01 13:07:36