我有细分为块的文本文件,看起来像这样:
foo: a
bar: b
bat: cfoo: d
bar: e
bat: f...
有没有办法可以单独编辑每个块(即为块运行一组规则,然后移动到下一个块)?
结果应如下所示:
foo: ab
bar: bc
bat: cfoo: de
bar: ef
bat: f...
我看不出如何使用适用于整个文件的规则来实现这一点。
我有细分为块的文本文件,看起来像这样:
foo: a
bar: b
bat: cfoo: d
bar: e
bat: f...
有没有办法可以单独编辑每个块(即为块运行一组规则,然后移动到下一个块)?
结果应如下所示:
foo: ab
bar: bc
bat: cfoo: de
bar: ef
bat: f...
我看不出如何使用适用于整个文件的规则来实现这一点。
这对你有用吗?
awk -v RS="" -F'\n' '{for(i=1;i<=NF-1;i++){split($(i+1),x," ");$i=$i" "x[2];print $i}print $NF;print RS}' file
使用您的数据:
kent$ echo "foo: a
bar: b
bat: c
foo: d
bar: e
bat: f"|awk -v RS="" -F'\n' '{for(i=1;i<=NF-1;i++){split($(i+1),x," ");$i=$i" "x[2];print $i}print $NF;print RS}'
foo: a b
bar: b c
bat: c
foo: d e
bar: e f
bat: f
您可以将awk
记录分隔符和字段分隔符设置为您需要的任何内容。默认情况下,字段分隔符是空格,第二个分隔符是\n
. 您希望将记录分隔符设置为空行,将字段分隔符设置为:
.
awk '{printf "%s:%s%s\n%s:%s%s\n%s:%s\n\n",$1,$2,$4,$3,$4,$6,$5,$6}' FS=: RS= file
foo: a b
bar: b c
bat: c
foo: d e
bar: e f
bat: f
您没有说明您要做什么,我猜数据转换只是一个示例,因此它们可能是更好的方法。