concatenate lines using shell scripting

Login or Register to Reply

Thread Tools Search this Thread
# 1  
Old 09-06-2009
concatenate lines using shell scripting

i have a mega file in this format:


i want to combine lines until = meet. the result should be :

need your help. thanks
# 2  
Old 09-06-2009
You can of course do this via shell scripting, but using sed would be a faster and by far clearer way to do it.

Why do you want to do it with a shell script?

# 3  
Old 09-06-2009
sorry, i didn't mean that. sed or awk are all good.

---------- Post updated at 01:11 PM ---------- Previous update was at 12:58 PM ----------

would you please show me how to do it in sed or awk? thx
# 5  
Old 09-06-2009
perhaps.....bur certainly better....

awk '{if($0 !~ /=/) ORS=""}{if($0 ~/=/) ORS="\n"} {print}' | sed -e 's/=//g' -e 's/,$//g' file

# 6  
Old 09-06-2009
in sed it is easy: we have two types of lines, the ones reading "=" and the others. When we encounter a "="-line, we want to print out what we have so far, minus the newlines. If we encounter one of the other lines we want to store its contents until we encounter a "="-line.

sed has a so-called "hold space", think of it as a variable, where you can store things until you need them. We append everything to this hold space until we encounter a "="-line, then we recall the hold space, filter out all embedded newlines and print it, then start over.

In the following script i have put in comment for your understanding, remove them, because sed doesn't allow inline commenting in scripts. Furthermore, you can put the whole script on one line, replacing linefeeds with semicolons:

sed -n '/^=/ {                   # if a line starts with "="
          s/.*//                 # delete this lines content
          x                      # exchange the pattern space (empty) and the hold space
          s/\n//g                # delete newlines
          p                      # then print what you have
     /^=/ ! {                    # if a line doesn't start with "="
          H                      # append it to the hold space
     }' /your/file > newfile

for short:

sed -n '/^=/{s/.*//;x;s/\n//gp};/^=/!{H}' /your/file > newfile

I hope this helps.

# 7  
Old 09-06-2009
Originally Posted by protocomm
perhaps.....bur certainly better....
Did you check the OP requirements Smilie , certainly not.
Login or Register to Reply

Thread Tools Search this Thread
Search this Thread:
Advanced Search

More UNIX and Linux Forum Topics You Might Find Helpful
Delete all CONSECUTIVE text lines from file shell scripting RJSKR28 Shell Programming and Scripting 5 07-21-2016 09:43 AM
Concatenate three lines into one FredAtArrow UNIX for Dummies Questions & Answers 7 08-14-2014 04:03 PM
Shell script to read lines in a text file and filter user data Shell Programming and Scripting VikrantD UNIX for Dummies Questions & Answers 3 03-25-2014 03:28 AM
How to concatenate lines with specific pattern? nixtime Shell Programming and Scripting 8 06-25-2013 05:39 PM
Concatenate lines with unique string AND number pioavi Shell Programming and Scripting 2 01-18-2012 06:43 AM
Concatenate lines in file shell script systemoper UNIX for Advanced & Expert Users 3 01-14-2012 05:40 PM
Need to concatenate spuriously separated lines lemele Shell Programming and Scripting 16 12-28-2011 01:21 AM
Concatenate two lines in a fIle uday.sena.m Programming 3 09-21-2011 11:50 PM
searching multiple lines and replacing in shell scripting anil8103 Shell Programming and Scripting 5 05-24-2011 05:51 AM
Concatenate lines between lines starting with a specific pattern s052866 Shell Programming and Scripting 9 10-24-2010 12:09 PM
Concatenate multiple lines based. indrajit_u Shell Programming and Scripting 8 06-30-2010 05:50 PM
concatenate lines in pairs kerl Shell Programming and Scripting 5 06-17-2010 11:26 AM
Concatenate two lines in one Orbix Shell Programming and Scripting 5 04-29-2010 04:40 PM
Concatenate lines in a single paragraph cgkmal Shell Programming and Scripting 4 05-17-2009 01:02 AM
How to concatenate consecutive lines shivi707 UNIX Desktop Questions & Answers 1 01-12-2009 08:08 AM