値を検索してカウンターに置き換える[閉じる]

値を検索してカウンターに置き換える[閉じる]

次の値を持つファイルがあります。

location 100 SlotNumber
..some lines inbetween
location 150 SlotNumber
..some lines inbetween
location 160 SlotNumber
..some lines inbetween

SlotNumberのようなSlotNumberを変更したいです。

location 100 SlotNumber1
location 150 SlotNumber2
location 160 SlotNumber3
...

100と1は相関関係がありません。 sedで一種のカウンタを使用し、SlotNumberを「SlotNumber + Counter」に置き換えて、各一致後にそれを増やしたいと思います。

このファイルにこの内容が何回表示されるのかわかりません。

ベストアンサー1

ここで基本ファイルから始めましょう…

$ cat file
location 100 Number
location 101 Number
location 102 Number

すべての行を一致させることができます:

$ awk '{print $0 NR}' file 
location 100 Number1
location 101 Number2
location 102 Number3

途中にフィラーがあると、状況がより複雑になります。特定の場所を何回見たかについて別のカウンターが必要です。

$ cat file
location 100 SlotNumber
..some lines inbetween
location 150 SlotNumber
..some lines inbetween
location 160 SlotNumber
..some lines inbetween

位置ラインのみ印刷できます。

$ awk 'BEGIN {x=1} /^location/ {print $0 x++}' file
location 100 SlotNumber1
location 150 SlotNumber2
location 160 SlotNumber3

または、スロット番号の数字を追加するだけです。

$ awk 'BEGIN {x=1} {if ($3=="SlotNumber") {print $0 x++} else {print $0} }' file
location 100 SlotNumber1
..some lines inbetween
location 150 SlotNumber2
..some lines inbetween
location 160 SlotNumber3
..some lines inbetween

これはawkの基本的なif-then-else説明を提供する良いサイトです。

http://www.thegeekstuff.com/2010/02/awk-conditional-statements/

おすすめ記事