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