ブロックに細分化されたテキストファイルがあり、次のようになります。
foo: a
バー: b
bat: cfoo: d
バー: e
バット: f...
各ブロックを個別に編集する方法はありますか (つまり、ブロックの一連のルールを実行してから次のブロックに移動します)?
結果は次のようになります。
foo: ab
バー: bc
バット: cfoo: de
bar: ef
bat: f...
ファイル全体に適用されるルールでこれを達成する方法がわかりません。
ブロックに細分化されたテキストファイルがあり、次のようになります。
foo: a
バー: b
bat: cfoo: d
バー: e
バット: f...
各ブロックを個別に編集する方法はありますか (つまり、ブロックの一連のルールを実行してから次のブロックに移動します)?
結果は次のようになります。
foo: ab
バー: bc
バット: cfoo: de
bar: ef
bat: f...
ファイル全体に適用されるルールでこれを達成する方法がわかりません。
レコードセパレーターとフィールドセパレーターを必要なものに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
あなたは何をしようとしているのかを述べていませんでした。データ変換は単なる例にすぎないので、より良いアプローチかもしれません。
これはあなたのために働きますか?
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