単語リストファイルで単語数を数えるときに発生順序を維持する方法

単語リストファイルで単語数を数えるときに発生順序を維持する方法

2つのファイルがあります。

  • file1固有の単語リスト
  • file2複数の文を含む

file1各単語の発生回数を一覧表示するタブ区切りのファイルを出力したいと思います。file2 ファイル1にリストされている順序を維持しながら

たとえば、

  • file 1:
    dog 
    apple
    cat
    
  • file 2:
    the dog played with the cat and the cat was white.
    the boy ate the apple.
    
  • 希望の出力:
    dog 1
    apple 1
    cat 2
    

従来試してみた回答コミュニティはすべて出力をソートします。

ベストアンサー1

すべてのUnixシステムのすべてのシェルでPOSIX awkを使用してください。

$ cat tst.awk
BEGIN { OFS="\t" }
NR==FNR {
    words[NR] = $1
    next
}
{
    $0 = " " $0 " "
    gsub(/[^[:alpha:]]+/,"  ")
    for ( i in words ) {
        word = words[i]
        cnts[word] += gsub(" "word" ","&")
    }
}
END {
    for ( i=1; i in words; i++ ) {
        word = words[i]
        print word, cnts[word]+0
    }
}

$ awk -f tst.awk file1 file2
dog     1
apple   1
cat     2

上記では、「単語」がすべてアルファベット文字で、一致が大文字と小文字を区別したい場合、または例のように入力がすべて小文字で、例のようにfile1の単語が一意であると仮定します。

おすすめ記事