Advanced

Awk Rawks

Story: Quick and Dirty Data Extraction in AWKTotal Replies: 3
Author Content
PaulFerris

Oct 26, 2005
9:39 AM EDT
I couldn't live without it. I've done more than you can imagine with this "simple" utility, including munge perl (perl you say?) yes, perl.

Because of a2p (Awk to Perl) you can "think" in awk, then translate to perl. Works like a charm for those quick and dirty assignments where you need something CPAN can do, and have some data munging to do.

I've used perl for quite some time, I still like the "feel" of awk better. The fact that it teaches pattern scanning is huge.
tadelste

Oct 26, 2005
9:51 AM EDT
You could write a howto about it. (hint)

phsolide

Oct 26, 2005
9:54 AM EDT
I have used awk for many, many years. In 1990, I was responsible for getting an aerospace engineer to generate finite element model (MSC/NASTRAN) input files using awk.

I have written a ".ini" file parser in awk, which consisted of a really weird state machine. It makes my head hurt just to look at that code now, even though I run it daily.

My favorite "awk" scripts (all 3 of these are one-liners, by the way):

1) Calculate mean (arithmetic average): awk 'BEGIN{sum=0;cnt=0;}{++cnt;sum+=$1}END{print sum, " ", cnt," ", sum/cnt;}'

2) Switch two columns, which is surprisingly useful: awk '{print $2, $1}'

3) Calculate median of a single column of numbers: sort -n | awk 'BEGIN{c=0;sum=0;}{a[c++]=$1;sum+=$1;}END{ave=sum/c;if((c%2)==1){median=a[int(c/2)];}else{median=(a[c/2]+a[c/2-1])/2;}print sum," ",c," ",ave," ",median}'

I've migrated to Python over the last year, but I used to do a lot of Perl. I still maintained a working acquaintance with "awk" over the years.
AnonymousCoward

Oct 26, 2005
4:04 PM EDT
I use {g}awk daily, although I'm getting into the habit of applying Ruby to things instead, via a simple skeleton app. It never ceases to amaze the onlookers when some intractible problem which looks like requiring days of hand-editing turns into fifteen minutes of awk hacking and an instant's runtime.

As per the UNIX® "no app is an island" philosophy, I also have fun doing stuff like this (lowercases a directory full of files):

for x in *[A-Z]*; do mv $x $(echo $x | tr [A-Z] [a-z]); done

Or this (eliminates duplicates, I use it on large TrueType collections):

for x in $(md5 *.png | sort | uniq -w32 -d | cut -f 2); do rm -vf "$x"; done

Post a reply to this thread:

A free account is needed to post. Write your comment here first: your text is kept in this browser while you sign up or log in, and is waiting for you when you come back.

Your message:
|||||
10
Markdown: **bold**, *italic*, [text](https://link), - lists, > quotes, $x^2$ for math. Formatting help

Sign up and post (it is free)  or  Log in and post