以下にファイルがあります。 2番目と4番目の結合フィールドの発生回数に応じて、最初のフィールドの番号を再割り当てする必要があります。 3番目と5番目のフィールドは関係ありません。アイデア?入力ファイルは次の順序でソートされます。
sort -t',' -k2,2n -k4,4 -k5,5rn
入力する:
1,01053,11315,ABC,-38,Sin
1,01053,11315,ABC,-88,Sin
1,01053,11315,CDE,-114,Sin
1,2003700,11314,ABC,-1,Sin
1,2003700,11314,CDE,-44,unit
1,2003700,11314,CDE,-72,unit
1,2003700,11314,CDE,-694,Sin
私が望む出力:
1,01053,11315,ABC,-38,Sin
2,01053,11315,ABC,-88,Sin
1,01053,11315,CDE,-114,Sin
1,2003700,11314,ABC,-1,Sin
1,2003700,11314,CDE,-44,unit
2,2003700,11314,CDE,-72,unit
3,2003700,11314,CDE,-694,Sin
答え1
ファイルは2番目と4番目のフィールドに基づいてソートされているため、順番に番号付きの行を連続する必要があります。したがって、ファイルは1行ずつ処理されます。行が前の行と同じ順序にある場合は順序番号を増やし、そうでない場合は順序番号を1にリセットします。
awk -F, '{
if ($2 FS $4 == previous) i++; else i=1;
sub(/^[^,]*/, i);
print;
previous = $2 FS $4;
}'