Program to combine two lines in a file on checking the first character of each line


Login or Register to Reply

 
Thread Tools Search this Thread
# 8  
Hi Ravinder/Rudi,

What if my file content looks like this
Code:
5, jaya, male, 4-5-90, single
-smart
6, prakash, male, 5-4-84, married
-fair
7, raghavi, female, 12-10-85, married
calm
-talented
9, bhaskar, male, 29-12-92, single
-studios
___________

Please suggest and also can you please explain your code?

Regards,
Jaya
# 9  
Hello Jaya,

Could you please try following and let me know if this helps you.
Code:
awk '($0 !~ /^[0-9]/){A=A?A OFS $0:$0;next} ($0 ~ /^[0-9]/ && A){print A;A=""} {A=$0} END{print A}' OFS=""  Input_file

Output will be as follows.
Code:
5, jaya, male, 4-5-90, single-smart
6, prakash, male, 5-4-84, married-fair
7, raghavi, female, 12-10-85, marriedcalm-talented
9, bhaskar, male, 29-12-92, single-studios

Explanation for above code is as follows too.
Code:
awk '($0 !~ /^[0-9]/){  ##### Checking if line is NOT starting from digits or not here.
A=A?A OFS $0:$0;        ##### creating a variable named A which will having current line's value appending to itself whenever above condition will be TRUE.
next}                   ##### skipping all statements now by using next keyword.
($0 ~ /^[0-9]/ && A){   ##### Checking if line is starting from digits or not here.
print A;                ##### printing the variable A's value now.
A=""}                   ##### Nullifying the value of variable A now.
{A=$0}                  ##### taking current line's value to variable A now.
END{                    ##### starting END block now.
print A}                ##### printing the variable A's value now.
' OFS=""  Input_file    ##### setting OFS(Output field separator) value to NULL here and mentioning Input_file name here too.

Thanks,
R. Singh
# 10  
Quote:
Originally Posted by jayaP
Hi Ravinder/Rudi,

What if my file content looks like this
Code:
5, jaya, male, 4-5-90, single
-smart
6, prakash, male, 5-4-84, married
-fair
7, raghavi, female, 12-10-85, married
calm
-talented
9, bhaskar, male, 29-12-92, single
-studios
___________

Please suggest and also can you please explain your code?

Regards,
Jaya
What if you explained what you then need/expect?
# 11  
Hi Ravinder/Rudi,

Both the codes are not impacting the file and copying the file as is.
Code:
5, jaya, male, 4-5-90, single
-smart
6, prakash, male, 5-4-84, married
-fair
7, raghavi, female, 12-10-85, married
calm
-talented
9, bhaskar, male, 29-12-92, single
-studios

Code:
5, jaya, male, 4-5-90, single-smart
6, prakash, male, 5-4-84, married-fair
7, raghavi, female, 12-10-85, marriedcalm-talented
9, bhaskar, male, 29-12-92, single-studios

I'm pasting my sample original file below
Code:
5,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,Validate
Class [TGWFTRNBO]],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
6,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,Validate
Class [TGWFTRNBO]],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
7,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,Validate
Class [TGWFTRNBO]],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
The operative account
10,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,Validate
Class [TGWFTRNBO]],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

It is ok even if the commas in second line is concatenated with before line.

---------- Post updated at 07:32 PM ---------- Previous update was at 07:16 PM ----------

Guys-

Ravinder and Rudi. You are simply AWESOME!! Hats OFF

The script you provided is working great. Thanks a lot.

Regards,
Jaya

---------- Post updated at 07:42 PM ---------- Previous update was at 07:32 PM ----------

Ravinder,

It is working fine with your script. One more need is that, I want to remove those commas followed by the line starting with number while concatenating.

Sample input file
Code:
5,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,Validate
Class [TGWFTRNBO]],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
6,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,Validate
Class [TGWFTRNBO]],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
7,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,Validate
Class [TGWFTRNBO]],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
The operative account
10,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,Validate
Class [TGWFTRNBO]],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

output should be like
Code:
5,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,ValidateClass[TGWFTRNBO]]
6,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,ValidateClass[TGWFTRNBO]]
7,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,ValidateClass[TGWFTRNBO]]The operative account
10,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,ValidateClass [TGWFTRNBO]]

Regards,
Jaya

Last edited by Don Cragun; 02-26-2016 at 07:53 PM.. Reason: Fix CODE tags on Sample input file.
# 12  
Hello jayaP,

Please use code tags for showing inputs also which you are using into your posts too.
Could you please try following and let me know if this helps you.
Code:
awk '($0 !~ /^[0-9]/){sub(/,+$/,X,A);A=A?A OFS $0:$0;next} ($0 ~ /^[0-9]/ && A){sub(/,+$/,X,A);print A;A=""}{A=$0}END{sub(/,+$/,X,A);print A}' OFS= ""  Input_file

Output will be as follows.
Code:
5,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,ValidateClass [TGWFTRNBO]]
6,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,ValidateClass [TGWFTRNBO]]
7,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,ValidateClass [TGWFTRNBO]]The operative account
10,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,ValidateClass [TGWFTRNBO]]

Thanks,
R. Singh
# 13  
Try also
Code:
awk '{sub (/,+$/,_); printf "%s%s", /^[0-9]+/?XS:"", $0; XS = RS} END {printf RS}' file
5,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,ValidateClass [TGWFTRNBO]]
6,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,ValidateClass [TGWFTRNBO]]
7,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,ValidateClass [TGWFTRNBO]]The operative account
10,1,32784506,6/3/2015,6/3/2015,9:15:22,6/3/2015,9:15:34,0,16,0,ValidateClass [TGWFTRNBO]]

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
awk to remove lines that do not start with digit and combine line or lines
cmccabe
I have been searching and trying to come up with an awk that will perform the following on a converted text file (original is a pdf). 1. Since the first two lines are (begin with) text they are removed 2. if $1 is a number then all text is merged (combined) into one line until the next...... Shell Programming and Scripting
3
Shell Programming and Scripting
Need to combine two lines in a file based on first character of each line in a file
jayaP
Hi, I have a requirement where I need to combine two lines in a file based on first character of each line in a file. Please find the sample content of the file below: Code: _______________________ 5, jaya, male, 4-5-90, single smart 6, prakash, male, 5-4-84, married fair 7, raghavi,...... UNIX for Advanced & Expert Users
1
UNIX for Advanced & Expert Users
Need to combine two lines in a file based on first character of each line in a file
jayaP
Hi, I have a requirement where I need to combine two lines in a file based on first character of each line in a file. Please find the sample content of the file below: Code: _______________________ 5, jaya, male, 4-5-90, single smart 6, prakash, male, 5-4-84, married fair 7, raghavi,...... UNIX for Dummies Questions & Answers
1
UNIX for Dummies Questions & Answers
Need a program that read a file line by line and prints out lines 1, 2 & 3 after an empty line...
Ferocci
Hello, I need a program that read a file line by line and prints out lines 1, 2 & 3 after an empty line... An example of entries in the file would be: SRVXPAPI001 ERRO JUN24 07:28:34 1775 REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F ...... Shell Programming and Scripting
8
Shell Programming and Scripting
Combine multiple unique lines from event log text file into one line, use PERL or AWK?
Mayday22
I can't decide if I should use AWK or PERL after pouring over these forums for hours today I decided I'd post something and see if I couldn't get some advice. I've got a text file full of hundreds of events in this format: Record Number : 1 Records in Seq : ...... Shell Programming and Scripting
3
Shell Programming and Scripting