Visit Our UNIX and Linux User Community


AWK formatting help.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting AWK formatting help.
# 1  
Old 04-22-2011
AWK formatting help.

Dear all

I require help with AWK regarding this situation

Input is :

Code:
fn1 12345
fn1 23456
fn3 231513
fn1 22325
fn3 123125

Desired output is
Code:
fn1 12345 23456 22325
fn3 231513 123125

Of course to be taken in mind that fn(n) can be anywhere but always $1

I have some messy shell code to achieve this, but it's not worth pasting.

Thank you for your assistance.
Best regards
Peasant.
# 2  
Old 04-22-2011
Code:
awk '{a[$1]=a[$1]?a[$1] FS $2:$2}END {for(i in a)print i, a[i]}' file

# 3  
Old 04-22-2011
Code:
awk '$1 in a{a[$1]=a[$1] FS $2; next} {a[$1]=$2} END{for(e in a) print e, a[e]}' infile

# 4  
Old 04-22-2011
Thanks folks.

Since i'm still in process of mastering AWK, some hints would be very useful (explanation of code execution)
Documentation online is ok, but it really lacks real life examples elaborated (like this).

Regards
Peasant.
# 5  
Old 04-22-2011
Code:
$ ruby -ane 'BEGIN{h={}};(h[$F[0]]||=[])<<$F[1];END{h.each{|x,y|puts "#{x} #{y.join(" ")}"}}' file
fn1 12345 23456 22325
fn3 231513 123125

Create a hash, store first field as key and second field as value if key is found, otherwise, initialize the value an empty array. At the end, print the hash.
# 6  
Old 04-22-2011
Quote:
Originally Posted by Peasant
Thanks folks.

Since i'm still in process of mastering AWK, some hints would be very useful (explanation of code execution)
Documentation online is ok, but it really lacks real life examples elaborated (like this).

Regards
Peasant.
Code:
awk '{a[$1]=a[$1]?a[$1] FS $2:$2}END {for(i in a)print i, a[i]}' file

Here a value is assigned to the array element a[$1] with a condition expression operator:
Code:
a[$1]=a[$1]?a[$1] FS $2:$2

Explanation:
Code:
a[$1]? -> if a[$1] has a value then 
  a[$1]=a[$1] FS $2
else 
  a[$1]=$2

This User Gave Thanks to Franklin52 For This Post:

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Suffix formatting with awk

i would like to format the 9 character with suffix as "0". i tried below it doesn't work. >a=12345 > echo $a | awk '{printf "%-09s\n",$1}' >12345 required output is 123450000 can you guys help me out ? (7 Replies)
Discussion started by: expert
7 Replies

2. UNIX for Dummies Questions & Answers

awk formatting

Hi all, I'm writing a simple awk code: awk 'BEGIN {FS="|"};{print "Type\tNumber\ttypes\tTotal";};{print $1, "\t", $2, "\t", $3, "\t", $4, "\t";}' db_query.txt it gives me the result: Type Number types Total XXX 498.0 5100.0 5274.661 Type Number types Total... (7 Replies)
Discussion started by: messi777
7 Replies

3. Shell Programming and Scripting

Formatting a report using awk

Our vendor produces a report that I would like to format in a particular way. Here is the sample output from their report: # AA.INDEX 2 11 2 239 52 (7,2) 07 MAY 11 203.1 55 # ACCOUNT 2 89561 2 ... (4 Replies)
Discussion started by: thaller
4 Replies

4. Shell Programming and Scripting

formatting awk

when i try this awk its giving out put as below. awk '!(/^$/||/--/||/selected/||/^ *$/){print $1}' tmp.txt output ===== 1 2010-08-03-12.31.26.126000 how excluede the 1st line ? i mean i want output only 2nd line i.e 2010-08-03-12.31.26.126000; (5 Replies)
Discussion started by: rocking77
5 Replies

5. Shell Programming and Scripting

AWK printing formatting help please

Hi all, Below is my testfile: COST,31-MAR-2011 01:01:04,31-MAR-2011 11:22:12,622 COST,21-MAR-2011 22:00:20,22-MAR-2011 11:07:23,788 FARE,23-MAR-2011 22:00:22,24-MAR-2011 10:10:46,731 FARE,02-MAR-2011 14:01:50,03-MAR-2011 08:30:54,1110 I need to append a number, for example 700, to the... (2 Replies)
Discussion started by: newbie_01
2 Replies

6. Shell Programming and Scripting

html formatting using awk

Hi I have a file as given below: <table border=1> <TR><TH>Script Name</TH><TH>CVS Status</TH><TH>Script Location</TH></TR> <TR><TD><CENTER>Work Area: /home/ustst/</CENTER></TD></TR> <TR><TD><CENTER>admin_export.sh</CENTER></TD><TD><CENTER>Locally... (1 Reply)
Discussion started by: sudvishw
1 Replies

7. Shell Programming and Scripting

output formatting with awk.

# echo $PATH /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin How would i write a script to display permission on each folders in $PATH variable below format. drwxr-xr-x 2 0 root 4096 Nov 24 14:51 /usr/kerberos/sbin drwxr-xr-x 2 0... (2 Replies)
Discussion started by: pinga123
2 Replies

8. Shell Programming and Scripting

awk script formatting

Hello, I have got the following kine in my script awk '{printf("%s,", $0);next}{printf("%s", $0)}' ORS="," a.txt > b.out The contents of b looks somewaht like this: QUEUE(QUEUE1.Q),CURDEPTH(0),QUEUE(QUEUE2.Q),CURDEPTH(0),QUEUE(QUEUE3.Q),CURDEPTH(0) But my desired output is :... (10 Replies)
Discussion started by: King Nothing
10 Replies

9. UNIX for Advanced & Expert Users

Formatting file with Awk?

I have a file in CSV format (2 columns ID and Number of Items): AB1 ,,10 AB2 ,,20 AB2 ,, 30 AB3 ,, 10 AB4 ,, 20 AB4 ,, 30 AB4 ,, 40 AB5 ,, 50 AB6 ,, 10 AB7 ,, 20 AB7 ,, 30 AB7 ,, 40 ...... This file is produced daily i would like to get it in the following format, so... (6 Replies)
Discussion started by: SAMZ
6 Replies

10. Shell Programming and Scripting

Formatting using awk

Let's say I write a simple script that contains the following: date | awk '{print $1}' date | awk '{print $2}' Of course, when I run the script the output will look similar to: Tue Mar What if I want my ouput to be on one line as follows: Tue Mar What changes would I need to... (2 Replies)
Discussion started by: cdunavent
2 Replies

Featured Tech Videos