在两个标题之间插入新的字符串

时间:2015-01-07 14:53:07

标签: linux bash shell awk terminal

我有许多

形式的多行文字文件
222 333 444 _benny
300 400 500 _andrew
311 411 511 _reusee
322 433 544 _benny
500 500 600 _andrew

我需要从_benny取出字符串到_andrew并在它们之间插入一个带_yahoi的字符串,以便输出变为

222 333 444 _benny
250 321 422 _yahoii
300 400 500 _andrew

我尝试了awk '/_benny/,/_andrew/' filename

但它只显示文字

1 个答案:

答案 0 :(得分:0)

这个awk脚本

awk '/_benny/,/_andrew/ { if ( $0 ~ /_benny/ ) { print $0; print "250 321 422 _yahoii"; next } { print } }' filename

将产生(假定的)期望结果

222 333 444 _benny
250 321 422 _yahoii
300 400 500 _andrew
322 433 544 _benny
250 321 422 _yahoii
500 500 600 _andrew

根据@ ed-morton的评论避免/start/,/end/您可以尝试这样做:

awk '{ if ( $0 ~ /_benny/ || $0 ~ /_andrew/ ) { if ( $0 ~ /_benny/ ) { print $0; print "250 321 422 _yahoii"; next } { print } } }' filename