Ook*_*ker 5 awk shell-script text-processing replace
我有一个这样的文件
...
1562 first part
1563 H col3 H col4
1564 H col3 H col4
...
3241 H col3 H col4
3242 third part
...
Run Code Online (Sandbox Code Playgroud)
我只想将H每一行中的第一个替换为H#,#是它的出现次数。输出应该是:
...
1562 first part
1563 H1 col3 H col4
1564 H2 col3 H col4
...
3241 H1652 col3 H col4
3242 third part
...
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试过:
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
Run Code Online (Sandbox Code Playgroud)
这段代码很慢,需要读取每一行来替换,不能添加文件的第一部分和第三部分。有没有更好的方法来做到这一点?也许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
...
Run Code Online (Sandbox Code Playgroud)
这看起来对含有这些线路H和替换H用H具有可变我们一起不断递增。请注意gsub(),sub()如果您想在所有匹配的模式中执行此更改,而不是仅在一个模式中执行此更改,则可以使用代替。
final1是一个真条件,因此它执行默认的 awk 操作:{print $0},即打印整行。