重複を排除するために行に数字のサフィックスを追加するには?
擬似コード:
if currLine.startsWith("tag:")
x = numFutureLinesMatching(currLine)
if (x > 0)
currLine = currLine + ${x:01}
入力ファイル
tag:20230901-FAT
val:1034
tag:20230901-FAT
val:1500
tag:20230901-LAX
val:8934
tag:20230901-SMF
val:2954
tag:20230901-LAX
val:1000
tag:20230901-FAT
val:1500
希望の出力
tag:20230901-FAT-02
val:1034
tag:20230901-FAT-01
val:1500
tag:20230901-LAX-01
val:8934
tag:20230901-SMF
val:2954
tag:20230901-LAX
val:1000
tag:20230901-FAT
val:1500
メモ:
- 最終コピーは変更されていないままにしてください。
- 初期重複には独自のサフィックスが付く可能性があるため、カウントダウンを選択しました。
- awkは良い選択肢のように見えますが、一般的なスクリプト言語であればすべて可能です。
ベストアンサー1
awk
すべての配列インデックスを使用できます。レコード全体(「行」)も使用できます。
正規表現の一致を作成し、tag:
カウンタを開始しますが、最初の一致のために1つを修正します。
awk '$0 ~ /^tag:/ { n[$0]++?$0=sprintf("%s-%02d",$0,n[$0]-1):1 } 1'
カウントダウンにするにはtac
2回使用してください。
tac infile |
awk '$0 ~ /^tag:/ { n[$0]++?$0=sprintf("%s-%02d",$0,n[$0]-1):1 } 1' |
tac