Splitting Single line into multiple line

Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Splitting Single line into multiple line
# 1  
Old 10-15-2013
Splitting Single line into multiple line

Hi All,

I am reading a line from a file and writing it to other file.
Whenever I got a particular line then I want that line to be splited into 4 line and written it to new file. e.g My line is

U_ABC  connector3  pin24E  connector4  pin25E  connector5  pin26E  connector6  pin27E  connector7  pin27F  connector8  pin26F  connector9  pin25F  connector10  pin24F  connector11  pin23F  connector0  pin21E  connector12  pin22F  connector1  pin22E  connector13  pin21F  connector2  pin23E

I want above line to be splitted into four line as below.

1.Every line will start from first name U_ABC.
2.First line will have connection0 and its subsequent pin number,connection1 and its subsequent pin number, connection2 and its subsequent pin.
3. Same for other three line in seq.
4. Connection7 and connection13 along with their pin number should be not be included.

I can split it into four line as
awk '{for (i = 1; i <= NF; i += 3) printf "%d %d %d\n", $i, $(i+1), $(i+2)}' file

but dont no how to write it in sequence as above. Do I need to save it in some form of dictionary first?


Moderator's Comments:
Mod Comment You need CODE tags for input and output samples as well as for code samples. Especially when there is more than a single space between fields and when a line will be split into multiple lines when CODE tags are not used.

Last edited by Don Cragun; 10-15-2013 at 06:52 AM.. Reason: Add CODE tags.
# 2  
Old 10-15-2013
Assuming that you really want to translate "connectorX" from your input to "connectionX" in your output, and that you might want to feed multiple lines into this script, the following seems to do what you want:
awk '
{       mc = 0
        for(i = 2; i < NF; i += 2) {
                c = substr($i, 10) + 0
                if(c != 7 && c != 13) {
                        p[c] = $(i + 1)
                        if(c > mc) mc = c
        lc = 0
        for(i = 0; i <= mc; i++)
                if(i in p) {
                        if(lc++ == 0) o = $1
                        o = o "  connection" i "  " p[i]
                        if(lc == 3) {
                                print o
                                lc = 0
                        delete p[i]
        if(lc) print o
}' file

This could be simplified slightly if you will always only process one line at a time.
If each line to be processed always has connector0 through connector12 (except for connector7) and connector7 and connector13 might also appear, but no others, it could be simplified some more. I will leave those simplifications as an exercise for the reader.

With your sample input, this script produces:
U_ABC  connection0  pin21E  connection1  pin22E  connection2  pin23E
U_ABC  connection3  pin24E  connection4  pin25E  connection5  pin26E
U_ABC  connection6  pin27E  connection8  pin26F  connection9  pin25F
U_ABC  connection10  pin24F  connection11  pin23F  connection12  pin22F

This User Gave Thanks to Don Cragun For This Post:
# 3  
Old 10-15-2013
Thanks a lot!!!!!!!
That will solve my problem.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Splitting one line into multiple lines

Hi, I have one problem scenorio as below. my source file is : cat input_file. "hi","there","how","are","you?","It","was","great","working","with","you.","hope","to","work","y ou." my output should be like. "hi","there","how","are","you?", "It","was","great","working","with",... (7 Replies)
Discussion started by: abhilash_nakka
7 Replies

2. Shell Programming and Scripting

sed command to grep multiple pattern present in single line and delete that line

here is what i want to achieve.. i have a file with below contents cat fileName blah blah blah . .DROP this REJECT that . --sport 7800 -j REJECT --reject-with icmp-port-unreachable --dport 7800 -j REJECT --reject-with icmp-port-unreachable . . . more blah blah blah --dport 3306... (14 Replies)
Discussion started by: vivek d r
14 Replies

3. Shell Programming and Scripting

convert single line output to multiple line

Hi all, I have a single line output like below echo $ips want to convert above single line output as below format. Pls advice how to do ? Regards Kannan (6 Replies)
Discussion started by: kamauv234
6 Replies

4. Shell Programming and Scripting

splitting a huge line of file into multiple lines with fixed number of columns

Hi, I have a huge file with a single line. But I want to break that line into lines of with each line having five columns. My file is like this: code: "hi","there","how","are","you?","It","was","great","working","with","you.","hope","to","work","you." I want it like this: code:... (1 Reply)
Discussion started by: rajsharma
1 Replies

5. Shell Programming and Scripting

Multiple lines in a single column to be merged as a single line for a record

Hi, I have a requirement with, No~Dt~Notes 1~2011/08/1~"aaa bbb ccc ddd eee fff ggg hhh" Single column alone got splitted into multiple lines. I require the output as No~Dt~Notes 1~2011/08/1~"aaa<>bbb<>ccc<>ddd<>eee<>fff<>ggg<>hhh" mean to say those new lines to be... (1 Reply)
Discussion started by: Bhuvaneswari
1 Replies

6. Shell Programming and Scripting

Single to multiple line file

I am working with single line file with 589744523 characters having 542 "^M" (line feed) character. I want to make 542 different lines file from the single line file thr. shell program only (it can be done thr vi command) rd anil sorry for duplicate post previously, actually i don,t know... (6 Replies)
Discussion started by: anil_kut
6 Replies

7. Shell Programming and Scripting

make multiple line containing a pattern into single line

I have the following data file. zz=aa azxc-1234 aa=aa zz=bb azxc-1234 bb=bb zz=cc azxc-1234 cc=cc zz=dd azxc-2345 dd=dd zz=ee azxc-2345 ee=ee zz=ff azxc-3456 ff=ff zz=gg azxc-4567 gg=gg zz=hh azxc-4567 hh=hh zz=ii azxc-4567 ii=ii I want to make 2nd field pattern matching multiple lines... (13 Replies)
Discussion started by: VTAWKVT
13 Replies

8. Shell Programming and Scripting

single line input to multiple line output with sed

hey gents, I'm working on something that will use snmpwalk to query the devices on my network and retreive the device name, device IP, device model and device serial. I'm using Nmap for the enumeration and sed to clean up the results for use by snmpwalk. Once i get all the data organized I'm... (8 Replies)
Discussion started by: mitch
8 Replies

9. Shell Programming and Scripting

Splitting the line in multiple lines

Hi Guys, I need a help. I am pretty new to the shell level programing. I was trying to split a long lines to a multiple lines with few conditions. I goggle for the code and found some snippets and tried to modified it but I got few strange problems too. I have to split the lines if line is ... (3 Replies)
Discussion started by: dd_sh
3 Replies

10. Shell Programming and Scripting

Splitting a single line into multiple lines

I have a case where, I need to look into a file. Go to each line of the file, find the length of the line, if the length of the line is more than 75 chars, I need to split the line into multiple lines of 75chars max. If the length of the line is less than 75, we need not do anything. So at the... (4 Replies)
Discussion started by: thanuman
4 Replies
Login or Register to Ask a Question