ファイル内の発生別番号[閉じる]

ファイル内の発生別番号[閉じる]

以下にファイルがあります。 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;
}'

関連情報