Formatting of output


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Formatting of output
# 1  
Old 06-18-2015
Formatting of output

Hi,

I have some output in the format below:
Code:
Col-A   Col-B
8781    4319
8781    2332
8781    0269
5550    3282
5550    9465
5550    7607
7064    4456
.
.

I want to re-format the output so i will get something like this:
Code:
8781:4319,2332,0269
5550:3282,9465,7607
7064:4456

for example 8781 occurs in three rows in Col-A but with different corresponding values in Col-B. In the desired output, one entry of 8781 is maintained but the corresponding values in Col-B are now separated by comma in the same row.

Tnx

Last edited by Scrutinizer; 06-19-2015 at 04:24 AM.. Reason: code tags
# 2  
Old 06-18-2015
Hello james2009,

Kindly use code tags as per forum rules for your codes/inputs/commands in your posts.
Following may help you in same.
Code:
 awk 'FNR==NR{if(NR>1){A[$1]=A[$1]?A[$1] OFS $NF:$NF;next}} ($1 in A){print $1 ":" A[$1];delete A[$1]}' OFS=,  Input_file Input_file

Output will be as follows.
Code:
8781:4319,2332,0269
5550:3282,9465,7607
7064:4456

Thanks,
R. Singh

Last edited by RavinderSingh13; 06-18-2015 at 12:09 PM..
# 3  
Old 06-18-2015
If order doesn't matter, try
Code:
awk 'NR>1 {T[$1]=T[$1] "," $2} END {for (t in T) print t, substr(T[t],2)}' OFS=: file
5550:3282,9465,7607
7064:4456
8781:4319,2332,0269

This User Gave Thanks to RudiC For This Post:
# 4  
Old 06-19-2015
Or else something like this

Code:
[akshay@localhost tmp]$ cat file
Col-A Col-B
8781 4319
8781 2332
8781 0269
5550 3282
5550 9465
5550 7607
7064 4456

Code:
[akshay@localhost tmp]$ awk '$1 in A{A[$1]=A[$1]","$2;next}{A[C[++d]=$1]=$2}END{for(i=2; i<=d; i++)print C[i]":"A[C[i]]}' file
8781:4319,2332,0269
5550:3282,9465,7607
7064:4456

# 5  
Old 06-19-2015
Thanks all for the suggestions.

@RudiC, your awk script gave me the best output when run against a whole lot of data. Pls can you explain the logic.

@Akshay: Your script also gave a good output but i observed it left out the first row.
# 6  
Old 06-19-2015
I skipped header, you can set i=1 in END block.
This User Gave Thanks to Akshay Hegde For This Post:
# 7  
Old 06-19-2015
Note that neither RudiC nor Akshay Hegdes provided suggestions that printed a header because the output you said you wanted did not include a header!

Reformatting RudiC's code, adding code to print the header, and adding comments:
Code:
awk '
NR == 1 {print $1, $2}			# Print header, changing field separator
NR > 1	{T[$1] = T[$1] "," $2}		# For data lines (input line # > 1),
					# add field 2 to comma separated list
					# of values associated with field 1.
END	{for (t in T)			# At end, for each different field 1
					# value found...
		print t, substr(T[t],2)	# print the field 1 value, followed by
					# the output field separator, followed
					# by the list of values found for this
					# field 1 value (start with character 2
					# to skip over the leading comma
					# inserted before the 1st field 2 value
	}				# in the list).
' OFS=: file	# Set output field separator to a colon and name the file to be
		# processed.

Does this help you understand how his code works?
This User Gave Thanks to Don Cragun For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Formatting the Output

Hi, I am trying to use printf command and format certain output in a specific format as under: While the left side (upto |) of the above format is part of a fixed header function, the right side is where i am expecting data to be printed. However, as seen, Row1 value is reflecting on last... (5 Replies)
Discussion started by: EmbedUX
5 Replies

2. Shell Programming and Scripting

Formatting the output

Hi, I have a file which contents entries in this form. Only in /data4/temp abc.000001 Only in /data4/temp abc.000003 Only in /data4/temp abc.000012 Only in /data4/temp abc.000120 Only in /data4/temp abc.000133 Only in /data4/temp abc.001444 i want to read line by line and format... (2 Replies)
Discussion started by: arijitsaha
2 Replies

3. Shell Programming and Scripting

Output Formatting

Hi Guys I need help removing some lines from output i am receiving from a shell script. Here is the output: http://i52.tinypic.com/10z0fut.png I am trying to remove the output that i have circled. . ${EDW}/extracts/bin/extracts_setup2.sh . ${EDW}/extracts/extracts.conf ... (7 Replies)
Discussion started by: mooey1232003
7 Replies

4. Shell Programming and Scripting

Formatting of output

Hi Experts, I have to create a report for certain audit and my output looks as follows I m trying to format my output to look like Any inputs would be highly appreciated Thanks Syed (5 Replies)
Discussion started by: maverick_here
5 Replies

5. Shell Programming and Scripting

formatting output

Sorry for being a n00b, but I'm having a lot more trouble than I should with formatting the output to the program I finally completed. I'm basically looking for the linux equivalent to setw( ) from c++ so that I can print things in columns like this (but without the underlines lol): MISSPELLED: ... (4 Replies)
Discussion started by: aikaterinimak
4 Replies

6. Shell Programming and Scripting

Formatting ls output

I am using find and ls to search for "warez" files on my server. find /home/ -regex ".*\.\(avi\|mp3\|mpeg\|mpg\|iso\)" -print0 | xargs -0 ls -oh This command produces this: -rw-r--r-- 1 1000 3.2M Feb 18 2009 /home/user/public_html/lupus.mp3 I want to only get this 3.2M... (4 Replies)
Discussion started by: bonrad
4 Replies

7. Shell Programming and Scripting

more help with formatting ls output...

Ok, for a fun project, my goal is to replicate the style of "catalog" on an old apple ] *A 002 SOMEAPPLESOFTFILE B 004 SOMEFILE T 006 SOMETEXT I 002 SOMEINTEGERFILE The first character is either " " or "*" depending on if the file is locked or not. Next is the filetype, so in... (1 Reply)
Discussion started by: patrick99e99
1 Replies

8. Shell Programming and Scripting

Formatting Output

Hi I tried running the below awk 'BEGIN { printf ("%s %-51s %s %-7s %s",$var1,$var2,$var3,$var4,$var5)}' from the command prompt and it is not working. Getting the error awk: Field $() is not correct. The source line number is 1. Actually my requirement is to form a string based on... (6 Replies)
Discussion started by: dhanamurthy
6 Replies

9. Shell Programming and Scripting

formatting output

Hi need some advice.. #grep -i hostname test.csv (gives the below output) HOSTNAME,name,host_test,,,,,,,, Now I need to format the above output as below. HOSTNAME: name=host_test Any easy way of doing this using awk or sed or printf? (4 Replies)
Discussion started by: balaji_prk
4 Replies

10. Shell Programming and Scripting

Formatting the output

Hi all, Have the following code(1) producing the results(2 & 3). Would like to know if there is a way to format the two reports created in a similar fashion. IE - The first is formatted nicely as a result of the echo "$xmpbdate $xavgs" >> $xmpbrpt However when I attempt to do the same on... (7 Replies)
Discussion started by: Cameron
7 Replies
Login or Register to Ask a Question