次のファイルがあります。
20001
17001
17001
53001
90001
90001
90001
重複したエントリがある場合は1を追加して$ 1を変更しようとしているので、出力は次のようになります。
20001
17001
17002
53001
90001
90002
90003
ベストアンサー1
awk '{$1+=seen[$1]++} 1' file
印刷する前に、現在の値$ 1に事後増加したハッシュ値を追加します。
上記のコードは、値が互いに近いときに繰り返される数値を生成します。たとえば、シーケンス2,2,3 - 出力は2,3,3です。 2、3、4はループを使用して達成できます。
awk '{while (c[$1]) {$1 += c[$1] += c[$1+c[$1]]} c[$1]++} 1'
配列は、最初の例c
のように増加する$1のオフセットを格納します。seen
その固有値のオフセットだけ $1 を増やすのではなく、以前に見られなかった新しい $1 に達するまで、次の値のオフセットだけ増加します。