我有一个像这样的文件
...
1562 first part
1563 H col3 H col4
1564 H col3 H col4
...
3241 H col3 H col4
3242 third part
...
我只想替换第一个H
在每一行H#
,与#
是其外观的数量。输出应为:
...
1562 first part
1563 H1 col3 H col4
1564 H2 col3 H col4
...
3241 H1652 col3 H col4
3242 third part
...
到目前为止,我已经尝试过:
max=`grep -c ' H ' b`
while [[ "$i" -le $max ]];do
grep -m $i ' H ' b|tail -n1|sed "s/H/H$i/1"
let i=i+1
done
这段代码很慢,它需要读取每一行来替换,并且不能添加文件的第一部分和第三部分。有没有更好的方法可以做到这一点?也许awk?谢谢你。
例如,您可以使用以下命令:
$ awk '/H/{sub("H", "H"++v)}1' file
1562 first part
1563 H1 col3 H col4
1564 H2 col3 H col4
3241 H3 col3 H col4
3242 third part
...
这看起来对含有这些线路H
和替换H
用H
具有可变我们一起不断递增。请注意gsub()
,sub()
如果您想在所有匹配的模式中执行此更改,则可以只使用一种,而不用。
最后1
一个条件是真实的,因此它将执行默认的awk动作:{print $0}
,即打印整行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句