Visit Our UNIX and Linux User Community


Awk Join multiple lines


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Awk Join multiple lines
# 1  
Old 10-27-2006
Awk Join multiple lines

Hi,

I have data with broken lines:

Sample data:

Code:
"12"|"25"|"a"|"b"|"c"|"d"|"e"|"f"|"2453748"|"08:10:50"
"16"|"25"|"a"|"b"|"c"|"d"|"e"|"f"|"
2453748"|"08:15:50"
"16"|"25"|"a"|"b"|"
c"|"d"|"e"|"f"|"2453748"|"08:19:50"
"16"|"25"|"a"|"b"|"c"|"d"|"e"|"f"|"2453748"|"08:19:50"

In the above data, 2nd & 3rd row's are split to two lines, and my goal is to achieve the below data

Code:
"12"|"25"|"a"|"b"|"c"|"d"|"e"|"f"|"2453748"|"08:10:50"
"16"|"25"|"a"|"b"|"c"|"d"|"e"|"f"|"2453748"|"08:15:50"
"16"|"25"|"a"|"b"|"c"|"d"|"e"|"f"|"2453748"|"08:19:50"
"16"|"25"|"a"|"b"|"c"|"d"|"e"|"f"|"2453748"|"08:19:50"

I have tried this code

Code:
awk 'BEGIN {
  FS=OFS="|"
  FLDmax="10"
}
{

if (NF < FLDmax ){
   print $0; getline ;ORS=""; print $0;ORS="\n"
}
else 
{
print $0}
}' inputfile >outputfile

and the output is

Code:
"12"|"25"|"a"|"b"|"c"|"d"|"e"|"f"|"2453748"|"08:10:50"
"16"|"25"|"a"|"b"|"c"|"d"|"e"|"f"|"
2453748"|"08:15:50""16"|"25"|"a"|"b"|"
c"|"d"|"e"|"f"|"2453748"|"08:19:50""16"|"25"|"a"|"b"|"c"|"d"|"e"|"f"|"2453748"|"08:19:50"
"12"|"25"|"a"|"b"|"c"|"d"|"e"|"f"|"2453748"|"08:10:50"
"12"|"25"|"a"|"
b"|"c"|"d"|"e"|"f"|"2453748"|"08:10:50""17"|

# 2  
Old 10-27-2006
Try this awk program :
Code:
awk '
        BEGIN {
           FS="|";
           FLDmax=10;
        }
        {
           while (NF < FLDmax || $0 ~ /\|\"$/) {
              getline record;
              $0 = $0 record
           }
           print $0
        }
    ' inputfile

Jean-Pierre.
# 3  
Old 10-27-2006
Code:
sed -e :a -e '/|$/N; s/\\\n//; ta'  oldfile > newfile

# 4  
Old 10-27-2006
Bug

Jean-Pierre Thanks again for your solution. it worked like a charm again. let me try to explain you the code you have posted, please correc me if i am wrong.


Code:
while (NF < FLDmax || $0 ~ /\|\"$/) {
              getline record;
              $0 = $0 record
           }

pick up all the records that for which the no of fields are less than 10 or if the line has is ending with |" and with a getline and $0 you are merging before printing it... am i right?
# 5  
Old 10-27-2006
While the current record ($0) is less than 10 fields (NF) or is imcomplete (endig with |"), update the current record by appending the next record.


Jean-Pierre.
# 6  
Old 10-27-2006
Thanks - Cheers!!!

Previous Thread | Next Thread
Test Your Knowledge in Computers #839
Difficulty: Medium
WebSocket is a computer communications protocol, providing half-duplex communication channels over a single TCP connection.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Join columns across multiple lines in a Text based on common column using BASH

Hello, I have a file with 2 columns ( tableName , ColumnName) delimited by a Pipe like below . File is sorted by ColumnName. Table1|Column1 Table2|Column1 Table5|Column1 Table3|Column2 Table2|Column2 Table4|Column3 Table2|Column3 Table2|Column4 Table5|Column4 Table2|Column5 From... (6 Replies)
Discussion started by: nv186000
6 Replies

2. Shell Programming and Scripting

awk join lines based on keyword

Hello , I will need your help once again. I have the following file: cat file02.txt PATTERN XXX.YYY.ZZZ. 500 ROW01 aaa. 300 XS 14 ROW 45 29 AS XD.FD. PATTERN 500 ZZYN002 ROW gdf gsste ALT 267 fhhfe.ddgdg. PATTERN ERE.MAY. 280 PATTERRNTH 5000 rt.rt. ROW SO a 678 PATTERN... (2 Replies)
Discussion started by: alex2005
2 Replies

3. Shell Programming and Scripting

Join lines using sed or awk

Hi, I have text file that looks like this: blabla bla PATTERN LINE1 LINE2 bla bla bla PATTERN LINE1 LINE2 bla PATTERN LINE1 LINE2 bla (9 Replies)
Discussion started by: hench
9 Replies

4. Shell Programming and Scripting

Join multiple lines from text file

Hi Guys, Could you please advise how to join multiple details lines into single row, with HEADER 1 as the record separator and comma(,) as the field separator. Input: HEADER 1, HEADER 2, HEADER 3, 11,22,33, COLUMN1,COLUMN2,COLUMN3, AA1, BB1, CC1, END: ABC HEADER 1, HEADER 2,... (3 Replies)
Discussion started by: budz26
3 Replies

5. Shell Programming and Scripting

Join common patterns in multiple lines into one line

Hi I have a file like 1 2 1 2 3 1 5 6 11 12 10 2 7 5 17 12 I would like to have an output as 1 2 3 5 6 10 7 11 12 17 any help would be highly appreciated Thanks (4 Replies)
Discussion started by: Harrisham
4 Replies

6. Shell Programming and Scripting

Join multiple lines

Hi I have a source file ( written i C ) where a funtion call is spread over multiple lines, for example : func( a, b, c ); I want this to be joined into one single line : func(a,b,c); How can this be done with awk and sed ? Regards. Hench (2 Replies)
Discussion started by: hench
2 Replies

7. Shell Programming and Scripting

Awk - join multiple files

Is it possible to join all the files with input1 based on 1st column? input1 a b c d e f input2 a b input3 a e input4 c (2 Replies)
Discussion started by: quincyjones
2 Replies

8. Shell Programming and Scripting

How to use SED to join multiple lines?

Hi guys, anyone know how can i join multiples lines using sed till the end of a file and output to another file in a single line? The end of each line will be replaced with a special char "#". I am using the below SED command, however it seems to remove the last 2 lines. Also not all lines... (12 Replies)
Discussion started by: DrivesMeCrazy
12 Replies

9. UNIX for Dummies Questions & Answers

Join 2 files with multiple columns: awk/grep/join?

Hello, My apologies if this has been posted elsewhere, I have had a look at several threads but I am still confused how to use these functions. I have two files, each with 5 columns: File A: (tab-delimited) PDB CHAIN Start End Fragment 1avq A 171 176 awyfan 1avq A 172 177 wyfany 1c7k A 2 7... (3 Replies)
Discussion started by: InfoSeeker
3 Replies

10. Shell Programming and Scripting

join on a file with multiple lines, fields

I've looked at the join command which is able to perform what I need on two rows with a common field, however if I have more than two rows I need to join all of them. Thus I have one file with multiple rows to be joined on an index number: 1 randomtext1 2 rtext2 2 rtext3 3 rtext4 3 rtext5... (5 Replies)
Discussion started by: crimper
5 Replies

Featured Tech Videos