Linked by Thom Holwerda on Tue 27th May 2008 13:08 UTC, submitted by Ward D
Thread beginning with comment 316108
To view parent comment, click here.
To read all comments associated with this story, please click here.
To view parent comment, click here.
To read all comments associated with this story, please click here.
RE[4]: what an wonderful tool
by fernandotcl on Sat 31st May 2008 05:37
in reply to "RE[3]: what an wonderful tool"
RE[5]: what an wonderful tool
by Doc Pain on Sat 31st May 2008 19:20
in reply to "RE[4]: what an wonderful tool"
Regarding the field separator:
Use the "-F" flag to specify the separator in awk.
That's correct. Another option is to set FS in your awk script. The solutions
awk -F ":" '{ print $2, $4; }' zeux.csv
or
awk 'BEGIN { FS = ":"; } { print $2, $4; }' zeux.csv
should give the same results. FS can be declared as a regular expression that makes "space or more spaces and / or tab or tabs" the field separator.
In my experience, awk can always replace cut with ease, but the opposite isn't always true. Still, cut is lighter on resources and also more readable (the operation you're performing seems more explicit to me).
Following the trend of "light weight solutions" and the philosophy to choose the best tool for each task, cut sometimes simply is the best solution. For example, in situations like
cat /etc/passwd | cut -d ":" -f 1
I wouldn't use awk.





Member since:
2006-10-08
As you pointed out correctly, there are cases when cut isn't the best tool. But that's tht nature of a tool - use it for what's it good at, and don't use it when it creates more problems than simply using another tool.
Cases where cut is a good tool are, where
1. you just want one of n fields,
2. the field delimiter isn't a space or a tab and
3. when you don't need to care for multiple spaces or tabs.
I remember a case where all three cases were met: I needed a stupid script that would extract all the nicknames from my X-Chat log files, so I did - and don't try this at home, kids - the following stupidity:
cat ${LOGFILES} | grep "<" | grep ">" | grep -v "CTCP" | cut -d '<' -f 2 | cut -d '>' -f 1 | sort | uniq -d | xargs echo > nicklist.txt
After I entered it and saw that it worked, I thought that I'd have better used awk... :-)