Merging lines in a text file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Merging lines in a text file
# 1  
Old 10-12-2010
Merging lines in a text file

hi,

I have a file as below:


Code:
Name: some_name
Date: some_date
Function Name: <some_function_name(jjjjjjjjj,
fjddddd, gggg, ggg)>
Changes:<Change A
more of change A>
Name: some_name
Date: some_date
Function Name: some_function_nameB(jjjjjjjjj,
fjddddd, gggg, ggg)
Changes:Change B
more of change B

I need a script which can merge the lines based on the sub-headings.

Expected output is:


Code:
Name: some_name
Date: some_date
Function Name: some_function_name(jjjjjjjjj,fjddddd, gggg, ggg)
Changes:Change A more of change A
Name: some_name
Date: some_date
Function Name: some_function_nameB(jjjjjjjjj,fjddddd, gggg, ggg)
Changes:Change B more of change B

Please help me on this.
# 2  
Old 10-12-2010
Code:
perl -0pe 's/\n^([^:]+)$/ \1/gm' file

If there are multiple lines to join with one header, then use this:
Code:
perl -0pe 's/\n^(.*:)/\0\1/gm;s/\n/ /g;s/\0/\n/g;$_.="\n"' file


Last edited by bartus11; 10-12-2010 at 11:46 AM..
# 3  
Old 10-12-2010
Sometimes, I put a form feed between each block using sed, then tr to swap all line feeds and form feeds, do my sorting or DB row insert processing with lines of blocks, and then tr to swap back. You cna use any character not in the text not null or >127 (may be stripped by ascii tools or trigger UTF-8 when you just meant iso-8859-1). '~' is very unpopular and visible, but is a sed meta-char, so form feed was stable and somewhat says each block is a page.

To merge lines in a block, sed is easy to use and understand, and everyone benefits from good indenting:

Code:
sed '
  :loop
  /<[^>]*$/!{
    /([^)]*$/!b
   }
  $b
  N
  s/\n/ /
  b loop
 '

Narrative reading: Make a branch target called loop; if NOT (a line has an opening '<' but no subsequent '>' ) AND NOT (a '(' and no subsequent ')' ), then branch to end (print and restart at next line, else if we are at EOF, print and exit; get the next line; turn the line feed into a space; go back to check for the terminating '>' or ')'.

Last edited by DGPickett; 10-12-2010 at 11:52 AM..
This User Gave Thanks to DGPickett For This Post:
# 4  
Old 10-12-2010
Code:
sed '/:/N;s/\n\([^:]*\)$/\1/;s/[<>]//g' infile

# 5  
Old 10-12-2010
Hi,

I did it sed way, try it:
Code:
sed -n '1h;2,$ {/^Name:\|^Date:\|^Function Name:\|^Changes:/ {s/ *$//;x;s/\n/ /g;p}; /^Name:\|^Date:\|^Function Name:\|^Changes:/! {s/ *$//;H}}; $ {x;s/\n/ /g;p}' <file>

Regards,
This User Gave Thanks to birei For This Post:
# 6  
Old 10-12-2010
You, too, deserve line feeds and indentation so your code structure is obvious. The bug you prevent and job you save may be your own! Smilie
# 7  
Old 10-12-2010
And awk one Smilie
Code:
awk '{printf (toupper(substr($0,1,1))!=substr($0,1,1) ||NR==1)?$0:RS $0}' file

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Match text to lines in a file, iterate backwards until text or text substring matches, print to file

hi all, trying this using shell/bash with sed/awk/grep I have two files, one containing one column, the other containing multiple columns (comma delimited). file1.txt abc12345 def12345 ghi54321 ... file2.txt abc1,text1,texta abc,text2,textb def123,text3,textc gh,text4,textd... (6 Replies)
Discussion started by: shogun1970
6 Replies

2. Shell Programming and Scripting

Merging the lines of a file

Hello, I have a file with few lines starting with a digit (1-5 only ) followed by a dot (.). Remaining all the lines to be merged with its previous numbered lines. Merging must be done with a space. E.g., Source file: 3. abc def xyz 5. pqr mno def 4. jkl uvw 7. ghi 1. abc xyz 6. mno... (4 Replies)
Discussion started by: magnus29
4 Replies

3. Shell Programming and Scripting

Merging multiple files using lines from one file

I have been working of this script for a very long time and I have searched the internet for direction but I am stuck here. I have about 3000 files with two columns each. The length of each file is 50000. Each of these files is named this way b.4, b.5, b.6, b.7, b.8, b.9, b.10, b.11, b.12... (10 Replies)
Discussion started by: iconig
10 Replies

4. Shell Programming and Scripting

merging two .txt files by alternating x lines from file 1 and y lines from file2

Hi everyone, I have two files (A and B) and want to combine them to one by always taking 10 rows from file A and subsequently 6 lines from file B. This process shall be repeated 40 times (file A = 400 lines; file B = 240 lines). Does anybody have an idea how to do that using perl, awk or sed?... (6 Replies)
Discussion started by: ink_LE
6 Replies

5. Shell Programming and Scripting

merging of 2 consecutive lines in a file for a specific pattern

Hi , I'm looking for a way to merge two lines only for a given pattern / condition. Input : abcd/dad + -49.201 2.09 -49.5 34 ewrew rewtre * fdsgfds/dsgf/sdfdsfasdd + -4.30 0.62 -49.5 45 sdfdsf cvbbv * sdfds/retret/asdsaddsa + ... (1 Reply)
Discussion started by: novice_man
1 Replies

6. Shell Programming and Scripting

Merging lines in a file

Hi, I want to merge the lines starting with a comma symbol with the previous line of the file. Input : cat file.txt name1,name2 ,name3,name4 emp1,emp2,emp3 ,emp4 ,emp5 user1,user2 ,user3 Output name1,name2,name3,name4 emp1,emp2,emp3,emp4,emp5 (9 Replies)
Discussion started by: mohan_tuty
9 Replies

7. Shell Programming and Scripting

Merging lines based on occurances of a particular character in a file

Hi, Is there any way to merge two lines based on specific occurance of a character in a file. I am having a flat file which contains multiple records. Each row in the file should contain specified number of delimiter. For a particular row , if the delimiter count is not matched with... (2 Replies)
Discussion started by: mohan_tuty
2 Replies

8. Shell Programming and Scripting

Urgent Need Help! Merging lines in .txt file

I need to write a script that reads through an input .txt file and replaces the end value with the end value of the next line for lines that have distance <=4000. The first label line is not actually in the input. In the below example, 3217 is the distance from the end of the first line to the... (12 Replies)
Discussion started by: awknerd
12 Replies

9. UNIX for Dummies Questions & Answers

merging two lines in a file

Hi All, I want to merge two lines in a file till the end of the file. So what could be the command to get so. say file name : sample.txt contents: country=1 send apps =1 rece=2 country=2 send apps =3 rece=3 .. ... output: country=1;send apps =1 rece=2 country=2;send apps =3... (6 Replies)
Discussion started by: thaduka
6 Replies

10. Shell Programming and Scripting

merging few columns of two text files to a new file

hi i need to select a few columns of two txt files and write it to a new file. there is one common field for both of these files. plz help me in this thanks in advance (4 Replies)
Discussion started by: kolvi
4 Replies
Login or Register to Ask a Question