Combine multiple lines in single line


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Combine multiple lines in single line
# 1  
Old 10-26-2010
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.

Code:
System name: xxx_yyy
Information: this is just a sample
file for this testing
today
Updated: This is not
updated
System name: testing_123
Information: another testing
Updated: No new update for this 
system name.
System name: abc_12333
Information: another testing again
and again
Updated: This has been updated
with new information

There are hundred lines with the above pattern.

Result:
Code:
System name: xxx_yyy
Information: this is just a sample file for this testing today
Updated: This is not updated
System name: testing_123
Information: another testing again
Updated: No new update for this system name.
System name: abc_12333
Information: another testing again and again
Updated: This has been updated with new information

# 2  
Old 10-26-2010
Code:
sed '
  :loop
  $b
  N
  /: .*\n.*: /{
    P
    s/.*\n//
    b loop
   }
  s/ *\n */ /
  b loop
 '

Narrative: This is what I call a sed looper, reading it's own lies after the first rather than exiting the script at the end to get the next line:
  1. declare a branch target 'loop',
  2. if last line, print and exit,
  3. If the two lines in the buffer each have ': ', print out the first line and go back to 'loop' to get another line.
  4. Remove the linefeed and any adjacent spaces in favor of a single space.
  5. Go back to 'loop' to get another line.
# 3  
Old 10-26-2010
Or with awk...

nawk -F : -f my.awk my.txt

my.awk
Code:
BEGIN {
        line=""
}

{

        if ( $1 == "System name" ||  $1 == "Information" ||  $1 == "Updated" ) {
                if ( length(line) > 0 ) { print line }
                line = $0
        } else {
                line = sprintf("%s %s", line, $0)
        }

}

END {
        print line
}

# 4  
Old 10-26-2010
Code:
awk '/: /{if(NR>1)print p;p=$0;next}{p=p FS $0}END{print p}' infile


Last edited by Scrutinizer; 10-26-2010 at 12:27 PM.. Reason: Removed ^[^:]* since it provided no added security
# 5  
Old 10-26-2010
Quote:
Originally Posted by DGPickett
Code:
sed '
  :loop
  $b
  N
  /: .*\n.*: /{
    P
    s/.*\n//
    b loop
   }
  s/ *\n */ /
  b loop
 '

Narrative: This is what I call a sed looper, reading it's own lies after the first rather than exiting the script at the end to get the next line:
  1. declare a branch target 'loop',
  2. if last line, print and exit,
  3. If the two lines in the buffer each have ': ', print out the first line and go back to 'loop' to get another line.
  4. Remove the linefeed and any adjacent spaces in favor of a single space.
  5. Go back to 'loop' to get another line.
you really are a genius! I wanted to learn more in this as im using this kind of text editing frequently. Do you know any reference on this kind of sed function where i can learn more?
# 6  
Old 10-26-2010
Code:
sed -n '/:/{x;1!s/\n/ /g;1!p;d;};H;${g;s/\n/ /g;p;}' infile

# 7  
Old 10-26-2010
Code:
echo `sed 's/^\(.*\):/|\1:/' input | tr -d '\n'` | sed 's/^|//' | tr '|' \\n

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

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

3. 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

4. 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

5. 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

6. 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

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