Converting text with "sed" or "awk"
I have a very large input set that looks something like this:
Label: foo, Other text: text description...
<insert label> Item: item description...
<insert label> Item: item description...
Label: bar, Other text:...
<insert label> Item:...
Label: baz, Other text:...
<insert label> Item:...
<insert label> Item:...
<insert label> Item:...
...
I would like to convert this to pull the label name (for example "foo"
) and replace the tag "<insert label>"
on the following lines with the actual label.
Label: foo, Other text: text description...
foo Item: item description...
foo Item: item description...
Label: bar, Other text:...
bar Item:...
Label: baz, Other text:...
baz Item:...
baz Item:...
baz Item:...
...
Can this be done with sed or awk or some other unix tool? If so, how can I do this?
+3
source to share
3 answers
One solution using sed
:
Content script.sed
:
## When line beginning with the 'label' string.
/^Label/ {
## Save content to 'hold space'.
h
## Get the string after the label (removing all other characters)
s/^[^ ]*\([^,]*\).*$/\1/
## Save it in 'hold space' and get the original content
## of the line (exchange contents).
x
## Print and read next line.
b
}
###--- Commented this wrong behaviour ---###
#--- G
#--- s/<[^>]*>\(.*\)\n\(.*\)$/\2\1/
###--- And fixed with this ---###
## When line begins with '<insert label>'
/<insert label>/ {
## Append the label name to the line.
G
## And substitute the '<insert label>' string with it.
s/<insert label>\(.*\)\n\(.*\)$/\2\1/
}
Content infile
:
Label: foo, Other text: text description...
<insert label> Item: item description...
<insert label> Item: item description...
Label: bar, Other text:...
<insert label> Item:...
Label: baz, Other text:...
<insert label> Item:...
<insert label> Item:...
<insert label> Item:...
Run it like this:
sed -f script.sed infile
And the result:
Label: foo, Other text: text description...
foo Item: item description...
foo Item: item description...
Label: bar, Other text:...
bar Item:...
Label: baz, Other text:...
baz Item:...
baz Item:...
baz Item:...
+2
source to share