ファイルに5回未満で表示されるすべての単語を削除します。

ファイルに5回未満で表示されるすべての単語を削除します。

各行に文字列を含むテキストファイルがあります。たとえば、次のようになります。

zanzibar
apple
banana
apple
carrot
banana
sausage
apple
apricot
tea
apple
apple

ファイルを読み、各単語の数を数え、5より小さい単語を削除しようとします。 5回以上表示される単語は一度だけ表示されます。

上記の場合、新しいファイルには次のものが必要です。

apple

ファイルに5回以上登場するからです。

これまでに試したことは、ステップ1 - > 5回未満で現れる文字列を削除することですが、それさえも機能しないようです。新しいファイルは空です。

awk -F'\n' '
  FNR==NR{ seen[tolower($1)]++; next }
  seen[tolower($1)]
  seen[tolower($1)]<5{ delete seen[tolower($1)] }
' all.txt 5-or-more.txt

修正する:

次のコマンドを実行しています。

awk '{ a[tolower($1)]++ } 
    END{
        for(word in a){ 
            if(a[word]>5){ print word }
        }
    }' all.txt > sorted.txt

ベストアンサー1

あなたがしたくない-F'\n'。これは、フィールド区切り文字を改行文字に設定し、レコード区切り文字が同じままであるため、役に立つことは何もしません\n

必要なのはこれだけです:

$ awk '{ a[tolower($1)]++ } 
    END{
        for(word in a){ 
            if(a[word]>=5){ print word }
        }
    }' file
apple

これは各単語($1)を配列のキーとして保存し、a単語が表示されるたびにその値を増やします。次に、ファイルの終わりにin値が5以上の単語を繰り返しa印刷します。a

おすすめ記事