数値サフィックスを追加して重複を削除する

数値サフィックスを追加して重複を削除する

重複を排除するために行に数字のサフィックスを追加するには?

擬似コード:

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

メモ:

  1. 最終コピーは変更されていないままにしてください。
  2. 初期重複には独自のサフィックスが付く可能性があるため、カウントダウンを選択しました。
  3. awkは良い選択肢のように見えますが、一般的なスクリプト言語であればすべて可能です。

ベストアンサー1

awkすべての配列インデックスを使用できます。レコード全体(「行」)も使用できます。

正規表現の一致を作成し、tag:カウンタを開始しますが、最初の一致のために1つを修正します。

awk '$0 ~ /^tag:/ { n[$0]++?$0=sprintf("%s-%02d",$0,n[$0]-1):1 }  1'

カウントダウンにするにはtac2回使用してください。

tac infile | 
awk '$0 ~ /^tag:/ { n[$0]++?$0=sprintf("%s-%02d",$0,n[$0]-1):1 }  1' |
tac

おすすめ記事