各テキストファイルの同じ行数

各テキストファイルの同じ行数

私は30を超える異なるテキストファイルを持っていますが、各ファイルには同じ単語が異なる時間に繰り返されます。たとえば、text1 "esr"では12回、text2 "esr"では21回繰り返されます。

単一のコマンドを使用して単語が繰り返される回数を出力できますか?

答え1

そしてgrep+トイレ管路:

for f in *.txt; do echo -n "$f "; grep -wo 'esr' "$f" | wc -l; done

grepオプション:

  • -w- 単語正規表現(全体/別の単語一致)

  • -o- 一致する部分文字列のみ印刷


  • wc -l- 各ファイルの行数(私たちの場合は一致する単語)を数えます。

答え2

strings ./*.txt|tr " " "\n"|sort|uniq -c

答え3

使用grepすべてのインスタンスを見つけて、次を使用して一意の行数を計算します。uniq -c

grep "word" * | sort | uniq -c

すべての入力ファイルを一致させるには、次のようにしますgrep -c

grep -c "word" * 

答え4

複数のファイルのすべての単語数を計算するには、AWK次の例を使用できます。

awk 'BEGIN{RS="[[:space:]]+"}
     {counts[$0]++}
     END{for(word in counts){print word " - " counts[word]}
     ' file1 file2 file...

これにより、各単語が別々の行にあるかのようにファイルが処理されます。それはBEGIN{RS="[[:space:]]+"} 部分、その後、1つを見るたびに計算します。ワイヤー。そのBEGIN部分を削除すると、それぞれが計算されます。ノーマルワイヤー。

特定の単語1つにのみ興味がある場合は、ENDブロックを次のように変更できます。

END{print counts["esr"]}

これは、「esr」が発生した回数だけを印刷しますが、大文字と小文字を区別することに注意してください。

大文字と小文字を区別するには、counts[tolower($0)]++またはを使用しますcounts[toupper($0)]++

カウントがあるファイルから次のファイルに移動したときにデータを印刷するチェックを追加することもできます。

関連情報