Coverting multiple lines to a single line


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Coverting multiple lines to a single line
# 1  
Old 09-18-2015
Coverting multiple lines to a single line

Hi all,

I have a requirement to covert multiple lines in a comma delimited file to a single line through shell scripting. We should compare the data in the first column in each line. If it is same, then the other data should be put in the same line.Below is the sample input and expected output:

Code:
Input:
 
ABC,AD,AS,ER
ABC,YT,YU,ER
ABC,GT
BVT,SD,WER,YUI,GHY,TRE
BVT,G,DRT,FE,GHW
MN,FR,ER,YU,WS,FH,YU,IO,DER
ABC,SE

Code:
Output:
 
ABC,AD,AS,ER,YT,YU,ER,GT
BVT,SD,WER,YUI,GHY,TRE,G,DRT,FE,GHW
MN,FR,ER,YU,WS,FH,YU,IO,DER
ABC,SE

I tried this using awk but was successful to convert a single line to multiple line and not visa versa.

Please help.
# 2  
Old 09-18-2015
Hello Bobby,

If you are saying you need column 1st as an index for output then considering that in you shown output 2 times like ABC,AD,AS,ER,YT,YU,ER,GT and ABC,SEis typo. Following may help you in same then, if order like Input_file doesn't matter for you.
Code:
awk -F, '{for(i=2;i<=NF;i++){A[$1]=A[$1]?A[$1] FS $i:$i}} END{for(i in A){print i FS A[i]}}' Input_file

Output will be as follows.
Code:
BVT,SD,WER,YUI,GHY,TRE,G,DRT,FE,GHW
ABC,AD,AS,ER,YT,YU,ER,GT,SE
MN,FR,ER,YU,WS,FH,YU,IO,DER

Thanks,
R. Singh
# 3  
Old 09-18-2015
If you need to stick to the sequence of occurrences of values in column 1, try
Code:
awk -F, '
$1 in RES       {X=$1
                 sub (X FS, "")
                 RES[X]=RES[X] FS $0
                 next
                }
                {RES[$1]=$0
                 SEQ[++CNT]=$1
                }
END             {for (i=1; i<=CNT; i++) print RES[SEQ[i]]}
' file
ABC,AD,AS,ER,YT,YU,ER,GT,SE
BVT,SD,WER,YUI,GHY,TRE,G,DRT,FE,GHW
MN,FR,ER,YU,WS,FH,YU,IO,DER

---------- Post updated at 15:03 ---------- Previous update was at 14:54 ----------

or, slightly simplified,
Code:
awk -F, '
!($1 in RES)    {SEQ[++CNT]=$1
                }
                {X=$1
                 sub (X FS, "")
                 RES[X]=RES[X] FS $0
                }
END             {for (i=1; i<=CNT; i++) print SEQ[i] RES[SEQ[i]]}
' file

# 4  
Old 09-20-2015
Coverting multiple lines to a single line

Ravindersingh,

The sample output given by me is correct.We shouldn't sort or reorder the records on the first column.The comparison of first field should happen between two consecutive lines only.

Hope this is clear.

Regards,
bobby

---------- Post updated at 01:46 PM ---------- Previous update was at 01:42 PM ----------

Hi rudi,

Thanks for this.But the records are getting disordered in the output.
Code:
ABC,SE

is getting appended with the
Code:
ABC,AD,AS,ER,YT,YU,ER,GT

line.

Thanks,
Bobby

Last edited by Bobby_2000; 09-20-2015 at 09:48 AM.. Reason: Typo
# 5  
Old 09-20-2015
Wasn't too clear in the spec. Try
Code:
awk -F, '
RES ~ "^" $1 FS {X=$1
                 sub (X FS, "")
                 RES=RES FS $0
                 next
                }
                {if (NR > 1) print RES
                 RES=$0
                }
END             {print RES}
' file
ABC,AD,AS,ER,YT,YU,ER,GT
BVT,SD,WER,YUI,GHY,TRE,G,DRT,FE,GHW
MN,FR,ER,YU,WS,FH,YU,IO,DER
ABC,SE

This User Gave Thanks to RudiC For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Multiple lines to single line

I have code as below # create temporary table `temp4277`(key(waybill_no)) select waybill_no,concat_ws('',card_type,card_series_no) cardinfo from rfid_temp_ticket where waybill_no='4277' group by... (4 Replies)
Discussion started by: kaushik02018
4 Replies

2. Shell Programming and Scripting

Making multiple lines as single line

Hi All, I have a spool file which as shown below. I want to make it as single line after every semicolon. In this case there should be 2 lines in vi editor. I am not used to use sed so could you guys please help me out ? exec spk_dba.sp_runsql('ALP','CREATE DATABASE LINK "TEST" CONNECT TO... (2 Replies)
Discussion started by: nicolas38
2 Replies

3. Shell Programming and Scripting

Combine multiple lines into single line

Hi All , I have a file with below data # User@Host: xyz @ # Query_time: t1 Lock_time: t2 Rows_sent: n1 Rows_examined: n2 SET timestamp=1396852200; select count(1) from table; # Time: 140406 23:30:01 # User@Host: abc @ # Query_time: t1 Lock_time: t2 Rows_sent: n1 Rows_examined:... (6 Replies)
Discussion started by: rakesh_411
6 Replies

4. Shell Programming and Scripting

merging multiple lines into single line

Hi, 1. Each message starts with date 2. There is blank line between each message 3. Each message does not contain same number of lines. Any help in merging multiple lines in each message to a single line is much appreciated. AIX: Korn Shell Error log file looks like below. ... (5 Replies)
Discussion started by: bala123
5 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

Combine multiple lines in single line

This is related to one of my previous post but now with a slight difference: I need the "Updated:" to be in one line as well as the "Information:" on one line as well. These are in multiple lines right now as seen below. These can have 2 or more lines that needs to be in one line. System name:... (8 Replies)
Discussion started by: The One
8 Replies

7. Shell Programming and Scripting

Multiple lines into a single line

Hi, I've some files with the following data and i need to convert the lines between the separator ---, into a single line. I've tried with the paste cmd but my main problem is that the number of lines between the separator is not fix, it can very between 1-4 lines. Input --- 2010-02-22... (4 Replies)
Discussion started by: RickyC9999
4 Replies

8. Shell Programming and Scripting

Getting multiple messy lines into one single line

I have a file that contains the following: :@:176:@:4:@:name:@:file:@:this is a summary:@:description can be long but who knows can even have <br> tags.:@:how to:@:type:@:18544:@:550:@:400:END: :@:177:@:9:@:name:@:file:@:summary:@:this will containg... (18 Replies)
Discussion started by: sysrenan
18 Replies

9. Shell Programming and Scripting

replacing multiple lines with single line

Can any one give me the idea on replacing multiple blank lines with a single blank line? Please conside it for a file having more than 100 number of characters. Regards, Siba (3 Replies)
Discussion started by: siba.s.nayak
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