Put ID at beginning of data lines
"Eliana" <[email protected]>
| Newsgroups | gmane.editors.sed.user |
|---|---|
| Message-ID | <[email protected]> |
I never quite got a good handle on the use of hold space, so I need help with taking a file which has identifying information for a person on one line, followed by data points on lines starting with a blank space for each data point. There could be anywhere from 1 to dozens of data lines per individual in the file.
I am running GNU sed version 3.02 on Linux.
Here is a sample input file:
"1","V3","Johnny Jamison"
144058604,149864828
104132262,115218852
40739561,80546082
"2","V2","Janet Anne Doe"
145956371,150258170
125505743,131005138
53487753,77418759
32142804,34367848
"3","V2","William Jones"
121742874,124782881
89861384,107281037
Note that some people may have identical ID information in the first field, so ^" is what I am using to indicate that the line is the one with ID informtion on it.
The output I would like to generate from the above input data would look like the following:
"1","V3","Johnny Jamison",144058604,149864828
"1","V3","Johnny Jamison",104132262,115218852
"1","V3","Johnny Jamison",40739561,80546082
"2","V2","Janet Anne Doe",145956371,150258170
"2","V2","Janet Anne Doe",125505743,131005138
"2","V2","Janet Anne Doe",53487753,77418759
"2","V2","Janet Anne Doe",32142804,34367848
"3","V2","William Jones",121742874,124782881
"3","V2","William Jones",89861384,107281037
It took quite a bit of work to take the original single line format for the data for each person, and turn it into the input format I am showing you above. But now that I have massaged the data into something I think should easier to work with, I am stumped.
If I try the standard code for joining lines, I get the data all merged back together again:
$ sed -e :a -e '$!N;s/\n /,/;ta' -e 'P;D' testx.txt
"1","V3","Johnny Jamison",144058604,149864828,104132262,115218852,40739561,80546082
"2","V2","Janet Anne Doe",145956371,150258170,125505743,131005138,53487753,77418759,32142804,34367848
"3","V2","William Jones",121742874,124782881,89861384,107281037
$
Putting code into a sed script, I tried:
$ cat x.sed
/^"/,/^ /{
h
G
s/^\(".*"\)\n /\1,/
}
And I got duplicate lines and no prepending of ID information:
$ sed -f x.sed testx.txt
1","V3","Johnny Jamison"
"1","V3","Johnny Jamison"
144058604,149864828
144058604,149864828
104132262,115218852
40739561,80546082
"2","V2","Janet Anne Doe"
"2","V2","Janet Anne Doe"
145956371,150258170
145956371,150258170
125505743,131005138
53487753,77418759
32142804,34367848
"3","V2","William Jones"
"3","V2","William Jones"
121742874,124782881
121742874,124782881
89861384,107281037
$
I have tried a number of other ways, with varied (and often much uglier) results, none getting any closer to the desired output.
I think I do prefer using a sed script for this than trying to make a one liner.
Suggestions?
Thanks,
Eliana