我有一个文件,其值如下:
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”,并在每次匹配后递增它。
我不知道该文件中有多少次出现。
从这里的基本文件开始......
$ 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/