Visit Our UNIX and Linux User Community


Merge lines


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Merge lines
# 1  
Old 03-12-2013
Merge lines

Hello
I have a file with
Code:
 CAR 23
COLOR 12
CAR 44
COLOR 12
CAR 55
COLOR 20
SIZE BIG
CAR 56
CAR 57
COLOR 11

How can merge the CAR and the COLOR + SIZE (if there are COLOR,SIZE)
Code:
CAR 23 COLOR 12
CAR 44 COLOR 12
CAR 55 COLOR 20 SIZE BIG
CAR 56 
CAR 57 COLOR 11

Every line begin in CAR
Thanks
SHARON

Last edited by Corona688; 03-12-2013 at 12:54 PM..
# 2  
Old 03-12-2013
Code:
awk '/CAR/ && C { print C ; C=$0 ; next } { C=C" "$0; } END { if(C) print C }' inputfile

# 3  
Old 03-12-2013
Or:
Code:
 cat inputfile | tr '\n' ' '  | sed 's/ CAR /\nCAR /g; s/ $/\n/'

# 4  
Old 03-12-2013
Code:
sed '
  s/^  *//
  t loop
  :loop
  $b
  N
  s/ *\n *CAR /\
CAR /
  t p
  s/ *\n */ /
  t loop
  :p
  P
  s/.*\n//
  t loop
 ' in_file >out_file

Narrative: Clean leading spaces off the first line, branch to the target to clear the branch flag, create a loop back branch target, exit at EOF printing last line, get a second line into the buffer, if it is a CAR line just clean it up and branch to print first line, remove first line, and loop. If not a CAR line, turn the linefeed and any adjacent spaces into a space and loop. I call this a classic looper in sed, where you merge lines but have to deal with the next group or EOF. Note that a) it assumed the first line is a CAR line, and B) it checks for 'CAR ', not just 'CAR', so as not to be fooled by substrings of other words.
# 5  
Old 03-12-2013
Code:
awk ' {
        $1 = $1
        A[++n] = $0
} END {
        for ( i = 1; i <= n; i++ ) {
                if ( A[i] ~ /CAR/ ) {
                        A[i] = ( i == 1 ? A[i] FS : RS A[i] FS )
                        printf A[i]
                }
                else
                {
                        A[i] = ( i == n ? A[i] RS : A[i] FS )
                        printf A[i]
                }
        }
}' filename


Previous Thread | Next Thread
Test Your Knowledge in Computers #913
Difficulty: Medium
In bash, grep -v -e '^[[:space:]]*$' filename.txt will filter all the blank lines from filename.txt and display the results.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Merge Lines

Hello I have an input as below this is test we are( ) one end of description I am looking for output this is test we are () one end of description (2 Replies)
Discussion started by: Tomlight
2 Replies

2. Shell Programming and Scripting

remove blank lines and merge lines in shell

Hi, I'm not a expert in shell programming, so i've come here to take help from u gurus. I'm trying to tailor a csv file that i got to make it work for the LOAD FROM command. I've a datatable csv of the below format - --in file format xx,xx,xx ,xx , , , , ,,xx, xxxx,, ,, xxx,... (11 Replies)
Discussion started by: dvah
11 Replies

3. UNIX for Dummies Questions & Answers

To merge a few lines to 1 line

Hi Experts, This is my input file. input.txt 0 /dev/fd 25 /var 1 /tmp 1 /var/run 1. If this file has single line, then leave it, print the single line else merge the 4 lines above into 1 line as below e.g (6 Replies)
Discussion started by: streddy
6 Replies

4. Shell Programming and Scripting

Merge two lines using sed

Hi, I am trying to merge two lines, first line starts with a particular pattern and second line ends with a particular pattern in a file. Something like: First line starts with say ABC Second line ends with say XYZ After a merge, the line should become ABC.......XYZ I tried... (14 Replies)
Discussion started by: Sunny Arora
14 Replies

5. UNIX for Dummies Questions & Answers

Merge lines together in unix

I have a file like this. Pls help me to solve this in ksh (I should look for only Message : 111 and need to print the start time to end time Need to ignore other type of messages. Ex: if first message is 111 and second message is 000 or anything else then ignore the 2nd one and print start time... (7 Replies)
Discussion started by: mnjx
7 Replies

6. Shell Programming and Scripting

merge lines

Hi guys in input every 1st line 1st ID value located in 2nd line 1st occurrence . I need to print them down accordingly.. Thanx in advance input rs1040480_XXXXX.value rs1040481_YYYYY.value rs1040482_TXXXX.value 0.7408157 0.3410044 0.7408157 ... (7 Replies)
Discussion started by: stateperl
7 Replies

7. Shell Programming and Scripting

merge same pattern lines together

Hi people... I normally find with out any problem the solutions I need just by searching. But for this I'm not having any joy or jsut failing to adapt what I'ev found to work. I have applciation report that doesn't allow for manipulation at creation so I want to do some post modifcation... (2 Replies)
Discussion started by: nhatch
2 Replies

8. Shell Programming and Scripting

Merge 2 lines in file

Hi All, I have a data in flat file like below. Some of the information are in second row. 111_ABCProcess ----- ----- IN 0/0 111_PQRTrimPRocess ----- ----- OI 0/0 111_ZigZagTrimProcess ----- ----- ... (1 Reply)
Discussion started by: Amit.Sagpariya
1 Replies

9. Shell Programming and Scripting

Merge two lines

Hi I have two lines of data formatted as displayed below shop, price, remark, date a,#N/A,order to -fd, 20091011 and would like it to be shop:a price:#N/A remark:order to -fd date:20091011 How can I do it? Many thanks (2 Replies)
Discussion started by: lalelle
2 Replies

10. Shell Programming and Scripting

Merge lines into one

Source data file from oracle, terminated by ",". 'Cause some of fields have \r\n, then those lines were splitted into multiple lines in the expoted data file. Just vi this file, and found ^M. How to concatenate these line into one if it has a ^M at then end. thanks, (7 Replies)
Discussion started by: anypager
7 Replies

Featured Tech Videos