Awk:单独编辑数据块

时间:2013-04-06 17:35:39

标签: awk

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

  foo:a      bar:b
     蝙蝠:c

     

foo:d
     bar:e
     蝙蝠:f

     

...

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

  

foo:a b
     bar:b c
     蝙蝠:c

     

foo:d e
     bar:e f
     蝙蝠:f

     

...

我不知道如何通过适用于整个文件的规则来实现这一目标。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用awk,您可以将记录分隔符和字段分隔符设置为您需要的任何内容。默认情况下,字段分隔符为空格,recond分隔符为\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

你没有说明你想要做什么,我猜测数据转换只是一个例子,所以它们可能是一个更好的方法。