0

ブロックに細分化されたテキストファイルがあり、次のようになります。

foo: a
バー: b
bat: c

foo: d
バー: e
バット: f

...

各ブロックを個別に編集する方法はありますか (つまり、ブロックの一連のルールを実行してから次のブロックに移動します)?
結果は次のようになります。

foo: ab
バー: bc
バット: c

foo: de
bar: ef
bat: f

...

ファイル全体に適用されるルールでこれを達成する方法がわかりません。

4

2 に答える 2

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 に答える
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 に答える