查找值并用计数器替换

1 sed awk

我有一个文件,其值如下:

location 100 SlotNumber
..some lines inbetween
location 150 SlotNumber
..some lines inbetween
location 160 SlotNumber
..some lines inbetween
Run Code Online (Sandbox Code Playgroud)

我想像 SlotNumber 一样替换 SlotNumber:

location 100 SlotNumber1
location 150 SlotNumber2
location 160 SlotNumber3
...
Run Code Online (Sandbox Code Playgroud)

请注意,100 和 1 没有任何相关性。我希望在 sed 中使用某种计数器,并将 SlotNumber 替换为“SlotNumber+Counter”,并在每次匹配后递增它。

我不知道该文件中有多少次出现。

Fal*_*mes 5

从这里的基本文件开始......

$ cat file
location 100 Number
location 101 Number
location 102 Number
Run Code Online (Sandbox Code Playgroud)

我们可以匹配所有行:

$ awk '{print $0 NR}' file 
location 100 Number1
location 101 Number2
location 102 Number3
Run Code Online (Sandbox Code Playgroud)

如果中间有填充物,事情会变得更加复杂。您必须有一个单独的计数器来统计您看到某个位置的次数。

$ cat file
location 100 SlotNumber
..some lines inbetween
location 150 SlotNumber
..some lines inbetween
location 160 SlotNumber
..some lines inbetween
Run Code Online (Sandbox Code Playgroud)

我们只能打印位置线:

$ awk 'BEGIN {x=1} /^location/ {print $0 x++}' file
location 100 SlotNumber1
location 150 SlotNumber2
location 160 SlotNumber3
Run Code Online (Sandbox Code Playgroud)

或者全部,仅添加插槽编号的数字。

$ 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
Run Code Online (Sandbox Code Playgroud)

这是一个很好的网站,提供了 awk 的一些基本 if-then-else 解释。

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