Merge a group of lines into single line


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Merge a group of lines into single line
# 1  
Old 09-30-2010
Merge a group of lines into single line

Hi Everybody,

Below are the contents of the a text file ..,
Code:
SN = 8
MSI = 405027002277133
IKVALUE = DE6AA6A11D42B69DF6398D44B17BC6F2
K4SNO = 2
CARDTYPE = SIM
ALG = COMP128_3
SN = 8
MSI = 405027002546734
IKVALUE = 1D9F8BAA73973D8FBF8CBFB01436D822
K4SNO = 2
CARDTYPE = SIM
ALG = COMP128_3

I am looking to merge a group of lines into single line as noted below ..,

Code:
SN = 8,MSI = 405027002277133,IKVALUE = DE6AA6A11D42B69DF6398D44B17BC6F2,K4SNO = 2,CARDTYPE = SIM,ALG = COMP128_3
SN = 8,MSI = 405027002546734,IKVALUE = 1D9F8BAA73973D8FBF8CBFB01436D822,K4SNO = 2,CARDTYPE = SIM,ALG = COMP128_3

Can anyone help me in the same.

Moderator's Comments:
Mod Comment Use code tags, thanks.

Last edited by zaxxon; 09-30-2010 at 09:09 AM..
# 2  
Old 09-30-2010
Code:
$ ruby -00 -ne '$_.split(/^SN/).each{|x|x.strip!;puts "SN#{x.gsub("\n",",")}" if x!=""}' file
SN= 8,MSI = 405027002277133,IKVALUE = DE6AA6A11D42B69DF6398D44B17BC6F2,K4SNO = 2,CARDTYPE = SIM,ALG = COMP128_3
SN= 8,MSI = 405027002546734,IKVALUE = 1D9F8BAA73973D8FBF8CBFB01436D822,K4SNO = 2,CARDTYPE = SIM,ALG = COMP128_3

# 3  
Old 09-30-2010
Code:
awk 'END { print r }
r && /^SN/ {
  print r; r = x
  }  
{ 
  r = r ? r OFS $0 : $0 
  }' OFS=, infile

# 4  
Old 09-30-2010
One more with tr and sed:
Code:
tr -s '\n' ',' < infile| sed -e 's/,SN/\nSN/g' -e 's/,$/\n/'

# 5  
Old 09-30-2010
With Perl:

Code:
perl -lne'
  do {
    print join ",", @l;
    @l = ()
    } if @l and /^SN/;
    push @l, $_;
    print join ",", @l 
      if eof
   ' infile

# 6  
Old 09-30-2010
Without invoking external command
Code:
#!/bin/bash

while read line
do
   if [[ $line =~ ^SN(.*) ]]
   then
      [[ -n $out ]] && echo $out
      out="$line"
   else
      out="$out, $line"
   fi
done  < infile
echo $out

# 7  
Old 10-15-2010
could you explain this to me further?

Code:
while read line
do
   if [[ $line =~ ^SN(.*) ]] <-- line that starts with SN and whatever
   then
      [[ -n $out ]] && echo $out    <--when was $out defined or is it reserved?
      out="$line"
   else
      out="$out, $line"
   fi
done  < infile
echo $out


Last edited by radoulov; 10-15-2010 at 09:47 AM.. Reason: Code tags, please!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Merge multi-lines into one single line using shell script or Linux command

Hi, Can anyone help me for merge the following multi-line log which beginning with a " and line ending with ": into one line. *****Original Log***** 087;2008-12-06;084403;"mc;;SYHLR6AP1D\LNZW;AD-703;1;12475;SYHLR6AP1B;1.1.1.1;0000000062;HGPDI:MSISDN=12345678,APNID=1,EQOSID=365;... (3 Replies)
Discussion started by: rajeshlinux2010
3 Replies

2. Shell Programming and Scripting

Group Multiple Lines on SINGLE line matching pattern

Hi Guys, I am trying to format my csv file. When I spool the file using sqlplus the single row output is wrapped on three lines. Somehow I managed to format that file and finally i am trying to make the multiple line on single line. The below command is working fine but I need to pass the... (3 Replies)
Discussion started by: RJSKR28
3 Replies

3. Shell Programming and Scripting

Merge multiple lines into a single line

Hi all, I'm relatively new to scripting, I can do pretty basic things. I have a daily log file that looks like: timestamp=2017-06-28-01.01.35.080576; event status=0; userid=user1; authid=user1; application id=10.10.10.10.11111.12345678901; application name=GUI; ... (29 Replies)
Discussion started by: dwdnet
29 Replies

4. Shell Programming and Scripting

Joining multi-line output to a single line in a group

Hi, My Oracle query is returing below o/p ---------------------------------------------------------- Ins trnas value a lkp1 x a lkp1 y b lkp1 a b lkp2 x b lkp2 y ... (7 Replies)
Discussion started by: gvk25
7 Replies

5. Shell Programming and Scripting

Merge multi-line output into a single line

Hello I did do a search and the past threads doesn't really solve my issue. (using various awk commands) I need to combine the output from java -version into 1 line, but I am having difficulties. When you exec java -version, you get: java version "1.5.0_06" Java(TM) 2 Runtime... (5 Replies)
Discussion started by: flagman5
5 Replies

6. Shell Programming and Scripting

Awk: How to merge duplicate lines and print in a single

The input file: >cat module1 200611051053 95 200523457498 35 200617890187 57 200726098123 66 200645676712 71 200744556590 68 >cat module2 200645676712 ... (10 Replies)
Discussion started by: winter9
10 Replies

7. Shell Programming and Scripting

merge lines into single line based on symbol \t

The symbols are \t and \t\t (note: not tab) If the line starts with \t merge them into a single line upto symbol \t\t \t\t to end and start new line I able to join in a single line but not ending at \t\t and I completely confused help would be appreciated:b::D Input \ta tab XXXXXXXXXX \te... (5 Replies)
Discussion started by: repinementer
5 Replies

8. Shell Programming and Scripting

Help on Merge multi-lines into one single line

Hello, Can anyone let me know how to use Perl script to Merge following multi-lines into one single line... ***** Multi-line***** FILE_Write root OK Tue Jul 01 00:00:00 2008 cl_get_path file descriptor = 1 FILE_Write root OK ... (5 Replies)
Discussion started by: happyday
5 Replies

9. Shell Programming and Scripting

How to use Perl to merge multi-line into single line

Hi, Can anyone know how to use perl to merge the following multi-line information which beginning with "BAM" into one line. For each line need to delete the return and add a space. Please see the red color line. ******Org. Multi-line) BAM admin 101.203.57.22 ... (3 Replies)
Discussion started by: happyday
3 Replies

10. Shell Programming and Scripting

Merge multi-lines into one single line

Hi, Can anyone help me for merge the following multi-line log which beginning with a number and time: into one line. For each line need to delete the return and add a space. Please see the red color line. *****Original Log*****... (4 Replies)
Discussion started by: happyday
4 Replies
Login or Register to Ask a Question