Unix/Linux Go Back    


Shell Programming and Scripting BSD, Linux, and UNIX shell scripting — Post awk, bash, csh, ksh, perl, php, python, sed, sh, shell scripts, and other shell scripting languages questions here.

Merge multiple lines into a single line

Shell Programming and Scripting


Tags
awk, sed, solved

Reply    
 
Thread Tools Search this Thread Display Modes
    #22  
Old Unix and Linux 07-11-2017
MadeInGermany MadeInGermany is offline Forum Staff  
Moderator
 
Join Date: May 2012
Last Activity: 26 September 2017, 12:29 PM EDT
Location: Simplicity
Posts: 3,750
Thanks: 307
Thanked 1,258 Times in 1,137 Posts
Quote:
Originally Posted by Don Cragun View Post
We haven't seen enough information to determine whether or not there are <newline> (or <linefeed>) characters in the input file. Using RS= in awk to set the record separator to sequences of blank lines will not treat a line containing a <carriage-return> as a blank line. So, awk won't find any record separators in a DOS input file. (And, if you remove the <carriage-return> characters in the code that will happen AFTER the record separator search has already occurred.)

I would start by trying:

Code:
awk '
function p() {
    if(d) {
        sub(/;$/, "", o)
        print o
        o = ""
        d = 0
    }
}
{    sub(/\r/, "")
}
!NF {    p()
    next
}
{    $1 = $1
    o = o (o == "" ? "" : " ") $0
    d = 1
}
END {    p()
}' file

If that doesn't work, please show us the output from:

Code:
od -bc file

where file is the name of your input file.
I wonder if

Code:
    o = o (o == "" ? "" : " ") $0

is always correct.
We have a control variable d so let's use it. Becomes simpler and maybe fixes a problem, too.?

Code:
        o = o (d ? " " : "") $0

The Following User Says Thank You to MadeInGermany For This Useful Post:
dwdnet (07-12-2017)
Sponsored Links
    #23  
Old Unix and Linux 07-11-2017
Don Cragun's Unix or Linux Image
Don Cragun Don Cragun is offline Forum Staff  
Administrator
 
Join Date: Jul 2012
Last Activity: 26 September 2017, 8:18 AM EDT
Location: San Jose, CA, USA
Posts: 10,509
Thanks: 544
Thanked 3,676 Times in 3,136 Posts
Quote:
Originally Posted by dwdnet
Manually editing would be very time consuming so I'll attempt to explain using the example below. Running your initial function helped quite a bit and re-formated the majority of records. There were some fields, within the record, (statement text=) that still were broken up with a LF.

Sample Input

Code:
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
timestamp=2017-06-28-01.01.36.096486; event status=0; userid=user1; authid=user1; application id=10.10.10.10.11111.12345678901; application name=GUI; statement text=SELECT table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, from database where table.field = value
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
timestamp=2017-06-28-01.01.36.096486; event status=0; userid=user1; authid=user1; application id=10.10.10.10.11111.12345678901; application name=GUI; statement text=SELECT table.field, table.field, table.field from database where table.field = value
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
timestamp=2017-06-28-01.01.36.096486; event status=0; userid=user1; authid=user1; application id=10.10.10.10.11111.12345678901; application name=GUI; statement text=SELECT table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, 
table.field, table.field, from database where table.field = value
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
timestamp=2017-06-28-01.01.36.096486; event status=0; userid=user1; authid=user1; application id=10.10.10.10.11111.12345678901; application name=GUI; statement text=SELECT table.field, table.field, table.field from database where table.field = value
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
timestamp=2017-06-28-01.01.36.096486; event status=0; userid=user1; authid=user1; application id=10.10.10.10.11111.12345678901; application name=GUI; statement text=SELECT table.field, table.field, table.field from database where table.field = value
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
timestamp=2017-06-28-01.01.36.096486; event status=0; userid=user1; authid=user1; application id=10.10.10.10.11111.12345678901; application name=GUI; statement text=SELECT table.field, table.field, table.field from database where table.field = value

Sample Output

Code:
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
timestamp=2017-06-28-01.01.36.096486; event status=0; userid=user1; authid=user1; application id=10.10.10.10.11111.12345678901; application name=GUI; statement text=SELECT table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, from database where table.field = value
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
timestamp=2017-06-28-01.01.36.096486; event status=0; userid=user1; authid=user1; application id=10.10.10.10.11111.12345678901; application name=GUI; statement text=SELECT table.field, table.field, table.field from database where table.field = value
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
timestamp=2017-06-28-01.01.36.096486; event status=0; userid=user1; authid=user1; application id=10.10.10.10.11111.12345678901; application name=GUI; statement text=SELECT table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, table.field, from database where table.field = value
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
timestamp=2017-06-28-01.01.36.096486; event status=0; userid=user1; authid=user1; application id=10.10.10.10.11111.12345678901; application name=GUI; statement text=SELECT table.field, table.field, table.field from database where table.field = value
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
timestamp=2017-06-28-01.01.36.096486; event status=0; userid=user1; authid=user1; application id=10.10.10.10.11111.12345678901; application name=GUI; statement text=SELECT table.field, table.field, table.field from database where table.field = value
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
timestamp=2017-06-28-01.01.36.096486; event status=0; userid=user1; authid=user1; application id=10.10.10.10.11111.12345678901; application name=GUI; statement text=SELECT table.field, table.field, table.field from database where table.field = value

Hi dwdnet,
Instead of showing us the output you get from running the awk script provided in post #12 and labeling it "Sample Input", please show us the input that was given to that awk script. We need to see the input that is causing that code to fail. Seeing the output it produces without seeing the corresponding input leaves us guessing at what might be the problem!

Quote:
Originally Posted by MadeInGermany View Post
I wonder if

Code:
    o = o (o == "" ? "" : " ") $0

is always correct.
We have a control variable d so let's use it. Becomes simpler and maybe fixes a problem, too.?

Code:
        o = o (d ? " " : "") $0

Hi MadeInGermany,
Your suggested change makes the code 6 characters shorter, but it doesn't alter the underlying logic. The code that sets d to 1 only runs when NF is non-zero (so o can't be set to an empty string in this case) and the code that sets d to 0 also sets o to an empty string.
The Following User Says Thank You to Don Cragun For This Useful Post:
dwdnet (07-12-2017)
Sponsored Links
    #24  
Old Unix and Linux 07-12-2017
dwdnet dwdnet is offline
Registered User
 
Join Date: Jul 2017
Last Activity: 21 July 2017, 10:51 AM EDT
Posts: 12
Thanks: 17
Thanked 0 Times in 0 Posts
Thanks for making me go back to the original sample, I looked at a few of the more complex database statements and there were blank lines in some of the statement text= fields. Here's an example of the sample input:

Code:
timestamp=2017-06-23-15.26.59.242142;
  event status=0;
  userid=user1;
  authid=user1;
  application id=10.10.10.10.56150.170623204912;
  application name=application;
  statement text=xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx
      xxxxx xxxxx
             -1                  xxxxx  xxxxx
            ,-1                  xxxxx  xxxxx
            ,-1                  xxxxx  xxxxx
            ,xxxxx               xxxxx xxxxx
            ,xxxxx               xxxxx  xxxxx
            ,xxxxx               xxxxx  xxxxx
            ,xxxxx               xxxxx  xxxxx
            ,xxxxx               xxxxx  xxxxx
            ,xxxxx 
               xxxxx xxxxx = 1 xxxxx :xxxxx  :xxxxx  = 'N' xxxxx
                 xxxxx(xxxxx,-1)
               xxxxx
                 -1
             xxxxx                 xxxxx  xxxxx                
            ,xxxxx 
               xxxxx xxxxx = 1 xxxxx :xxxxx  :xxxxx  = 'N' xxxxx
                 xxxxx(xxxxx,-1)
               xxxxx
                 -1 
             xxxxx                 xxxxx  xxxxx
            ,xxxxx
               xxxxx xxxxx = 1 xxxxx :xxxxx  :xxxxx  = 'N' xxxxx
                 xxxxx(xxxxx,-1)
               xxxxx
                 -1
             xxxxx                 xxxxx xxxxx
            ,xxxxx
               xxxxx xxxxx = 1 xxxxx :xxxxx  :xxxxx  = 'N' xxxxx
                 xxxxx(xxxxx,-1)
               xxxxx
                 -1
             xxxxx                 xxxxx xxxxx
            ,-1                  xxxxx  xxxxx
                              
            ,xxxxx                 xxxxx xxxxx
        xxxxx xxxxx  xxxxx xxxxx    xx xxxxx  xxxxx   = xxxxx   
                          xxxxx xxxxx xxxxx     x xxxxx xxxxx   =  xxxxx   
                          xxxxx  xxxxx xxxxx    xx xxxxx xxxxx   =  xxxxx   
                          xxxxx xxxxx xxxxx     x xxxxx  xxxxx   =  xxxxx  
                          xxxxx  xxxxx (xxxxx xxxxx, xxxxx, xxxxx xxxxx :xxxxx  :xxxxx  = x xxxxx xxxxx xxxxx (x,x) xxxxx x xxxxx xxxxx xxxxx xxxxx xxxxx, xxxxx xxxxx 
                          (xxxxx xxxxx xxxxx xxxxx xxxxx) xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx <= x 
                          xxxxx (:xxxxx  :xxxxx  = x xxxxx xxxxx <= x)) xxxx xxxxx xxxxx = xxxx.xxxxx xxxxx xxxx.xxxxx = x
                          xxxxx  xxxxx xxxxx    xx xxxxx xxxxx = xxxxx
                          xxxxx  xxxxx xxxxx    xx xxxxx  xxxxx = xxxxx 
                          xxxxx xxxxx xxxxx     x xxxxx  xxxxx = xxxxx

       xxxxx ( (xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx = xxxxx)
               xxxxx
               (xxxxx xxxxx xxxxx xxxxx xxxxx)
             )
         xxxxx ((:xxxxx  :xxxxx      xxxxx xxxxx :xxxxx  :xxxxx      = -1 ) xxxxx ((:xxxxx  :xxxxx      xxxxx xxxxx :xxxxx  :xxxxx      <> -1 ) xxxxx (xxxxx      = :xxxxx  :xxxxx  xxxxx xxxxx xxxxx) )               )
         xxxxx ((:xxxxx  :xxxxx      xxxxx xxxxx :xxxxx  :xxxxx      = -1 ) xxxxx ((:xxxxx  :xxxxx      xxxxx xxxxx :xxxxx  :xxxxx      <> -1 ) xxxxx xxxxx       = :xxxxx  :xxxxx  xxxxx xxxxx = :xxxxx  :xxxxx )            )
         xxxxx ((:xxxxx  :xxxxx    xxxxx xxxxx :xxxxx  :xxxxx    = -1 ) xxxxx ((:xxxxx  :xxxxx    xxxxx xxxxx :xxxxx  :xxxxx    <> -1 ) xxxxx  xxxxx = :xxxxx  :xxxxx )                                   )
         xxxxx (xxxxx xxxxx xxxxx xxxxx = 'Y')
         xxxxx xxxxx = 'Y'
         xxxxx xxxxx = 'Y'
       xxxxx xxxxx,xxxxx,xxxxx;
  
timestamp=2017-06-23-15.26.59.244718;
  event status=0;
  userid=user1;
  authid=user1;
  application id=10.10.10.10.56150.170623204912;
  application name=application;
  
timestamp=2017-06-23-15.27.29.623890;
  event status=0;
  userid=user1;
  authid=user1;
  application id=10.10.10.10.56150.170623204912;
  application name=application;
  statement text=xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx
  
timestamp=2017-06-23-15.27.29.625418;
  event status=0;
  userid=user1;
  authid=user1;
  application id=10.10.10.10.56150.170623204912;
  application name=application;
  
timestamp=2017-06-23-15.28.00.043829;
  event status=0;
  userid=user1;
  authid=user1;
  application id=10.10.10.10.56150.170623204912;
  application name=application;
  statement text=xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx
      xxxxx xxxxx
            ,xxxxx               xxxxx  xxxxx
            ,xxxxx               xxxxx  xxxxx
            ,xxxxx
               xxxxx xxxxx = 1 xxxxx :xxxxx  :xxxxx  = 'N' xxxxx
                 xxxxx(xxxxx.xxxxx,-1)
               xxxxx
                 -1
             xxxxx                            xxxxx xxxxx
            ,-1                             xxxxx  xxxxx
                              

       xxxxx ( (xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx = xxxxx)
               xxxxx
               (xxxxx xxxxx xxxxx xxxxx xxxxx)
             )
         xxxxx ((:xxxxx  :xxxxx      xxxxx xxxxx :xxxxx  :xxxxx      = -1 ) xxxxx ((:xxxxx  :xxxxx      xxxxx xxxxx :xxxxx  :xxxxx      <> -1 )
         xxxxx (xxxxx       = :xxxxx  :xxxxx  xxxxx xxxxx xxxxx) )               )
       xxxxx xxxxx,xxxxx,xxxxx;
  
timestamp=2017-06-23-15.28.00.045415;
  event status=0;
  userid=user1;
  authid=user1;
  application id=10.10.10.10.56150.170623204912;
  application name=application;

    #25  
Old Unix and Linux 07-13-2017
RudiC RudiC is offline Forum Staff  
Moderator
 
Join Date: Jul 2012
Last Activity: 26 September 2017, 11:01 AM EDT
Location: Aachen, Germany
Posts: 11,379
Thanks: 299
Thanked 3,529 Times in 3,246 Posts
How far would - except for the final semicolon - bring you

Code:
awk '/^timestamp/  && NR > 1 {printf RS RS} 1' ORS=" " file

The Following User Says Thank You to RudiC For This Useful Post:
dwdnet (07-13-2017)
Sponsored Links
    #26  
Old Unix and Linux 07-13-2017
Don Cragun's Unix or Linux Image
Don Cragun Don Cragun is offline Forum Staff  
Administrator
 
Join Date: Jul 2012
Last Activity: 26 September 2017, 8:18 AM EDT
Location: San Jose, CA, USA
Posts: 10,509
Thanks: 544
Thanked 3,676 Times in 3,136 Posts
You could also try:

Code:
awk '
function p() {
        if(d) {
                print ""
                d = s = 0
        }
}
{       sub(/\r/, "")
} 
/^timestamp=/ {
        p()
} 
NF {    $1 = $1
        ns = sub(/;$/, "")
        printf("%s%s%s", (s ? ";" : ""), (d ? " " : ""), $0)
        s = ns
        d = 1
}              
END {   p()      
}' file

which gets rid of the DOS line terminator <carriage-return> characters, the semicolons at the ends of each output record that contains one, and strips out extraneous whitespace. With the sample input you provided in post #24, the above code produces the output:

Code:
timestamp=2017-06-23-15.26.59.242142; event status=0; userid=user1; authid=user1; application id=10.10.10.10.56150.170623204912; application name=application; statement text=xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx -1 xxxxx xxxxx ,-1 xxxxx xxxxx ,-1 xxxxx xxxxx ,xxxxx xxxxx xxxxx ,xxxxx xxxxx xxxxx ,xxxxx xxxxx xxxxx ,xxxxx xxxxx xxxxx ,xxxxx xxxxx xxxxx ,xxxxx xxxxx xxxxx = 1 xxxxx :xxxxx :xxxxx = 'N' xxxxx xxxxx(xxxxx,-1) xxxxx -1 xxxxx xxxxx xxxxx ,xxxxx xxxxx xxxxx = 1 xxxxx :xxxxx :xxxxx = 'N' xxxxx xxxxx(xxxxx,-1) xxxxx -1 xxxxx xxxxx xxxxx ,xxxxx xxxxx xxxxx = 1 xxxxx :xxxxx :xxxxx = 'N' xxxxx xxxxx(xxxxx,-1) xxxxx -1 xxxxx xxxxx xxxxx ,xxxxx xxxxx xxxxx = 1 xxxxx :xxxxx :xxxxx = 'N' xxxxx xxxxx(xxxxx,-1) xxxxx -1 xxxxx xxxxx xxxxx ,-1 xxxxx xxxxx ,xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xx xxxxx xxxxx = xxxxx xxxxx xxxxx xxxxx x xxxxx xxxxx = xxxxx xxxxx xxxxx xxxxx xx xxxxx xxxxx = xxxxx xxxxx xxxxx xxxxx x xxxxx xxxxx = xxxxx xxxxx xxxxx (xxxxx xxxxx, xxxxx, xxxxx xxxxx :xxxxx :xxxxx = x xxxxx xxxxx xxxxx (x,x) xxxxx x xxxxx xxxxx xxxxx xxxxx xxxxx, xxxxx xxxxx (xxxxx xxxxx xxxxx xxxxx xxxxx) xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx <= x xxxxx (:xxxxx :xxxxx = x xxxxx xxxxx <= x)) xxxx xxxxx xxxxx = xxxx.xxxxx xxxxx xxxx.xxxxx = x xxxxx xxxxx xxxxx xx xxxxx xxxxx = xxxxx xxxxx xxxxx xxxxx xx xxxxx xxxxx = xxxxx xxxxx xxxxx xxxxx x xxxxx xxxxx = xxxxx xxxxx ( (xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx = xxxxx) xxxxx (xxxxx xxxxx xxxxx xxxxx xxxxx) ) xxxxx ((:xxxxx :xxxxx xxxxx xxxxx :xxxxx :xxxxx = -1 ) xxxxx ((:xxxxx :xxxxx xxxxx xxxxx :xxxxx :xxxxx <> -1 ) xxxxx (xxxxx = :xxxxx :xxxxx xxxxx xxxxx xxxxx) ) ) xxxxx ((:xxxxx :xxxxx xxxxx xxxxx :xxxxx :xxxxx = -1 ) xxxxx ((:xxxxx :xxxxx xxxxx xxxxx :xxxxx :xxxxx <> -1 ) xxxxx xxxxx = :xxxxx :xxxxx xxxxx xxxxx = :xxxxx :xxxxx ) ) xxxxx ((:xxxxx :xxxxx xxxxx xxxxx :xxxxx :xxxxx = -1 ) xxxxx ((:xxxxx :xxxxx xxxxx xxxxx :xxxxx :xxxxx <> -1 ) xxxxx xxxxx = :xxxxx :xxxxx ) ) xxxxx (xxxxx xxxxx xxxxx xxxxx = 'Y') xxxxx xxxxx = 'Y' xxxxx xxxxx = 'Y' xxxxx xxxxx,xxxxx,xxxxx
timestamp=2017-06-23-15.26.59.244718; event status=0; userid=user1; authid=user1; application id=10.10.10.10.56150.170623204912; application name=application
timestamp=2017-06-23-15.27.29.623890; event status=0; userid=user1; authid=user1; application id=10.10.10.10.56150.170623204912; application name=application; statement text=xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx
timestamp=2017-06-23-15.27.29.625418; event status=0; userid=user1; authid=user1; application id=10.10.10.10.56150.170623204912; application name=application
timestamp=2017-06-23-15.28.00.043829; event status=0; userid=user1; authid=user1; application id=10.10.10.10.56150.170623204912; application name=application; statement text=xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx ,xxxxx xxxxx xxxxx ,xxxxx xxxxx xxxxx ,xxxxx xxxxx xxxxx = 1 xxxxx :xxxxx :xxxxx = 'N' xxxxx xxxxx(xxxxx.xxxxx,-1) xxxxx -1 xxxxx xxxxx xxxxx ,-1 xxxxx xxxxx xxxxx ( (xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx = xxxxx) xxxxx (xxxxx xxxxx xxxxx xxxxx xxxxx) ) xxxxx ((:xxxxx :xxxxx xxxxx xxxxx :xxxxx :xxxxx = -1 ) xxxxx ((:xxxxx :xxxxx xxxxx xxxxx :xxxxx :xxxxx <> -1 ) xxxxx (xxxxx = :xxxxx :xxxxx xxxxx xxxxx xxxxx) ) ) xxxxx xxxxx,xxxxx,xxxxx
timestamp=2017-06-23-15.28.00.045415; event status=0; userid=user1; authid=user1; application id=10.10.10.10.56150.170623204912; application name=application

The Following User Says Thank You to Don Cragun For This Useful Post:
dwdnet (07-13-2017)
Sponsored Links
    #27  
Old Unix and Linux 07-13-2017
dwdnet dwdnet is offline
Registered User
 
Join Date: Jul 2017
Last Activity: 21 July 2017, 10:51 AM EDT
Posts: 12
Thanks: 17
Thanked 0 Times in 0 Posts
Thanks everyone, Don's code above did the trick. I really appreciate it, this will help immensely and save me an enormous amount of time.
Sponsored Links
    #28  
Old Unix and Linux 07-17-2017
dwdnet dwdnet is offline
Registered User
 
Join Date: Jul 2017
Last Activity: 21 July 2017, 10:51 AM EDT
Posts: 12
Thanks: 17
Thanked 0 Times in 0 Posts
Hi Don,
I'm trying to figure out how your code works. If you wouldn't mind could you explain it for me please? I'd like to learn how it worked. Thanks.
Sponsored Links
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Linux More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Need help combining txt files w/ multiple lines into csv single cell - also need data merge jetsetter UNIX for Dummies Questions & Answers 2 02-04-2013 09:12 AM
Merge a group of lines into single line prasanth_babu UNIX for Advanced & Expert Users 8 10-18-2010 01:01 PM
merge lines into single line based on symbol \t repinementer Shell Programming and Scripting 5 07-15-2009 09:16 AM
Help on Merge multi-lines into one single line happyday Shell Programming and Scripting 5 05-25-2009 07:30 AM
Merge multi-lines into one single line happyday Shell Programming and Scripting 4 05-09-2009 01:00 PM



All times are GMT -4. The time now is 02:15 PM.