Re: Put ID at beginning of data lines

Werfgam Nadler <[email protected]>
Newsgroups gmane.editors.sed.user
Message-ID <[email protected]>
Hello,

another way (without using the hold space).
cat x.sed



N
/\n\"/!{
s/^\(.*\)\n/\n\1/;
D

}
P;
D


thanks
nadler


________________________________
 From: Eliana <[email protected]>
To: sed-users  <[email protected]> 
Sent: Tuesday, May 15, 2012 6:17 AM
Subject: Put ID at beginning of data lines
 
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



------------------------------------

-- 
Yahoo! Groups Links



[Non-text portions of this message have been removed]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.