2016-04-27 9 views
-1

私は、フォームコピーラインといくつかの行の先頭を置き換える

this is block 1 
a 1 2 3 
this is block 2 
a 3 1 9 
this is block 3 
a 10 2 32 
... 

の行を含むファイルを持って、私は線の一部をコピーし、それがなるように先頭を交換したいと思います:

this is block 1 
a 1 2 3 
b 1 2 3 
c 1 2 3 
this is block 2 
a 3 1 9 
b 3 1 9 
c 3 1 9 
this is block 3 
a 10 2 32 
b 10 2 32 
c 10 2 32 
... 

これをawk、sedまたは別のエレガントなオプションで解決する方法がわかりません。

+1

**のawkとは完全に可能**が、 'B'と 'C'で始まる行はどこから来ている私が見ることができません。 –

+1

'awk'で非常にシンプルでなければなりません。行が 'a'で始まっていれば、行を出力し、' $ 1 = "b" '、それを再度出力し、' $ 1 = "c" '、それをもう一度表示してください。 – Barmar

+0

コメントありがとう! bとcで始まる行は、aで始まる行のコピーであり、aは置換された行です。 – chris

答えて

1

sedを使用するかawkあなたはこの方法でそれを行うことができます。

$ cat data 
this is block 1 
a 1 2 3 
this is block 2 
a 3 1 9 
this is block 3 
a 10 2 32 
$ sed -rn '/^a/{p;s/^a/b/;p;s/^b/c/;p;n};p' data 
this is block 1 
a 1 2 3 
b 1 2 3 
c 1 2 3 
this is block 2 
a 3 1 9 
b 3 1 9 
c 3 1 9 
this is block 3 
a 10 2 32 
b 10 2 32 
c 10 2 32 
$ awk '{if($1=="a") {print;$1="b";print;$1="c";print} else {print}}' data 
this is block 1 
a 1 2 3 
b 1 2 3 
c 1 2 3 
this is block 2 
a 3 1 9 
b 3 1 9 
c 3 1 9 
this is block 3 
a 10 2 32 
b 10 2 32 
c 10 2 32 
$ 
+0

素晴らしいです、うまくいきました! – chris

関連する問題