1

次のようなファイルがあります。

1747834 222
1747834 222
1747834 222
1747834 222
2514112 32636
2514112 32636
2514112 32636

出現回数を数えて3列目に書き込みたい行ごとに、次のように各行を新しい行で分割する必要があります。

1747834 222 4

2514112 32636 3

私はこのスクリプトを書くことができました:

while read line; do a=`grep "$line" input | wc -l`; echo -e ${line}; echo -e "${a}\n"; done < input_uniq

input_uniq はの出力です

 cat input | uniq

残念ながら、次のような出力が得られます。

1747834 222
4

2514112 32636
3

エコーを 1 つだけ使用すると、出力が非常に奇妙になります (基本的に、$line は最初に $a で上書きされます)。そのため、必要なことを行う別の方法や、スクリプトを修正する方法の提案を探しています。

4

1 に答える 1

2

標準的な方法は次のとおりです。

sort file | uniq -c 
      4 1747834 222
      3 2514112 32636

行数は末尾ではなく先頭に追加されるため、awk正確にそれを行うスクリプトを次に示します。

$ awk '{seen[$0]++}END{for (line in seen) print line, seen[line]}' file
1747834 222 4
2514112 32636 3
于 2013-01-11T11:50:32.437 に答える