user3339527 user3339527 - 7 months ago 12
Bash Question

Copy lines and replace beginning of some lines

I have a file containing lines of the form

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


I would like to copy some of the lines and replace the beginning so that it becomes:

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
...


Not sure how to solve this with awk, sed or another elegant option.

Answer

Using sed or awk you can do it in this way:

$ 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
$
Comments