数値の発生回数でコンパイルされた繰り返し回数を取得します。

数値の発生回数でコンパイルされた繰り返し回数を取得します。

次の数値データを含む大容量ファイルがあります。

123
124
124
124
126
127
127

合計重複数(複数回表示される各数字で計算)を取得したいと思います。出力は5as(124は3回繰り返され、127は2回繰り返されます)でなければなりません。繰り返し回数を計算するために使用できますが、cat file | sort | uniq -d | wc -l出力は2です。つまり、2つの数字(124と127)が繰り返され、出力が5になることを望みます。

ベストアンサー1

awk 'seen[$0]++ {count += (seen[$0]==2 ? 2:1)} END {print count+0}' file

以前に行が表示されている場合は、その行countが最初の反復行かどうかに応じて2または1ずつ増加します。最後に印刷しますcount+0大文字と小文字が増えていない場合は、awkが空の文字列ではなく0を印刷するようにcount)。

別の方法:

awk '{count += seen[$0]; seen[$0] = (seen[$0]?1:2)} END {print count}' file

示されているように配列値を増やす代わりに、配列を使用して増やす必要がある数を指定します。行が最初に表示されたときに増加せず、2回目の発生時に2だけ増加し、次に1だけ増加します。 1回繰り返されるたびに。

おすすめ記事