0

我有细分为块的文本文件,看起来像这样:

foo: a
bar: b
bat: c

foo: d
bar: e
bat: f

...

有没有办法可以单独编辑每个块(即为块运行一组规则,然后移动到下一个块)?
结果应如下所示:

foo: ab
bar: bc
bat: c

foo: de
bar: ef
bat: f

...

我看不出如何使用适用于整个文件的规则来实现这一点。

4

2 回答 2

0

这对你有用吗?

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
于 2013-04-06T17:47:40.547 回答
0

您可以将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

您没有说明您要做什么,我猜数据转换只是一个示例,因此它们可能是更好的方法。

于 2013-04-06T17:56:50.330 回答