我有文本文件细分为块,看起来像这样:
foo:a bar:b
蝙蝠:cfoo:d
bar:e
蝙蝠:f...
有没有办法可以单独编辑每个块(即为块运行一组规则然后移动到下一个块)?
结果应如下所示:
foo:a b
bar:b c
蝙蝠:cfoo:d e
bar:e f
蝙蝠:f...
我不知道如何通过适用于整个文件的规则来实现这一目标。
答案 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
你没有说明你想要做什么,我猜测数据转换只是一个例子,所以它们可能是一个更好的方法。