2013-04-06 52 views
0

我有可細分爲塊,看起來像這樣的文本文件:awk中:數據編輯塊單獨

富:一個
條:乙
蝙蝠:C

富: d
條:電子
蝙蝠:F

...

有沒有一種方法可以單獨編輯每個塊(即,爲該塊運行一組規則,然後移動到下一個塊)?
結果應該是這個樣子:

富:AB
吧:BC
蝙蝠:C

富:德
條:EF
蝙蝠:F

...

我沒有看到如何通過適用於整個文件的規則來實現這一點。

回答

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 

你沒有說明你正在做什麼,我猜數據轉換隻是一個例子,所以他們可能是一個更好的方法。

+0

是的,實際數據有點複雜,但我認爲這正是我所尋找的。謝謝。 – ArtVandelay 2013-04-06 18:08:19

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 
+0

還沒有嘗試過是的,但這應該工作。謝謝。 – ArtVandelay 2013-04-06 18:05:48