2016-12-22 8 views
2

重複する文字列を含む5つのファイルがあります。複数のファイルから重複をカウントする

FILE1:

a 

FILE2:

b 

FILE3:

a 
b 

FILE4:

b 

file5:

c 

だから私はawk 'NR==FNR{A[$0];next}$0 in A' file1 file2 file3 file4 file5

を使用し、それが$ aを印刷していますが、b 3回は、他のファイルに繰り返した文字列が、唯一の印刷がある見るようにa

すべての繰り返し文字列(ab)を1行のコマンドを使用して各ファイルを分析/比較する方法を教えてください。また、各要素の繰り返し数を取得する方法もあります。

+0

複数のファイルにまたがって1つのファイル内で発生するリピートの処理方法が異なりますか?もしそうなら、あなたが望む異なる行動は何ですか? –

+0

@エドモートンしかし、私は以下の答えから解決策を得ました。私はちょうど私がお互いに比較してすべてのファイルを見てから繰り返される価値が欲しいので欲しい。ありがとう。 – TonyStark

答えて

2

あなたはこれらのいずれかを使用することができます。

awk '{count[$0]++}END{for (a in count) {if (count[a] > 1) {print a}}}' file1 file2 file3 file4 file5 

または

awk 'seen[$0]++ == 1' file1 file2 file3 file4 file5 

あなたは= 3、B = 4のためにこれをテストすることができます。

awk '{count[$0]++} END {for (line in count) if (count[line] == 3 && line == "a" || count[line] == 4 && line == "b") {print line} }' file1 file2 file3 file4 file5 

テスト:AWKで

$ awk '{count[$0]++}END{for (a in count) {if (count[a] > 1) {print a}}}' file1 file2 file3 file4 file5 
a 
b 


$ awk 'seen[$0]++ == 1' file1 file2 file3 file4 file5 
a 
b 

$ awk '{count[$0]++} END {for (line in count) if (count[line] == 2 && line == "a" || count[line] == 3 && line == "b") {print line, count[line]} }' 1 2 3 4 5 
a 2 
b 3 
+0

ありがとう、それも働いています。 (a = 3、b = 4)のような繰り返し文字列を数えることは可能ですか? – TonyStark

+1

@トニースターク:私はansを更新しました。あなたは最後のawkコマンドを試すことができますか? –

4

私はGNUソートとuniqのにお勧め:

sort file[1-5] | uniq -dc 

出力:man uniqから

2 a 
3 b 

-d:のみ、重複行を印刷

-c:出現回数によってプレフィックスライン

+0

それは部分的に働く。繰り返されない単語も印刷するためです。 file6にCの文字列があるとしたら、出力にCも出力します。 *私は質問 – TonyStark

+0

を編集しました。 'sort -u'を' sort |に置き換えてください。 uniq -d' – Cyrus

+0

ありがとうthats仕事。繰り返される文字列を数えることができる可能性があります。 like(a = 2、b = 3) – TonyStark

2

$ awk '{ a[$1]++ } END { for(i in a) if(a[i]>1) print i,a[i] }' file[1-5] 
a 2 
b 3 

これは、各レコード(この場合は文字)のoccurrancesをカウントし、1個以下の数でものを出力します。

関連する問題