Note: You are currently viewing my old web site. There is a new version with most of this content at OJB.NZ.
The new site is being updated, uses modern techniques, has higher quality media, and has a mobile-friendly version.
This old site will stay on-line for a while, but maybe not indefinitely. Please update your bookmarks. Thanks.


[Index] [Menu] [Up] Title[Header]
Tips

(Up to OJB's Mac Tips List Page)


Extract Columns Using Terminal

You can extract specific columns from text from the command line (Terminal app).

Use awk to extract a column. By default, columns are defined as non-space text separated by one of more whitespace characters (spaces or tabs) but this can be modified.

Here's a simple (pointless) example:
echo '111 2 3 4444 5' | awk '{print $2}'
This returns "2"

Note 1: The "print" is an awk command which prints a string, then a new line.
Note 2: The "$2" means return the second field.

This is useful to return a particular field from another command. Example:
ls -al | awk '{print $5}'
This displays the size (column 5) of all files in the current directory.

Here's a more complex example which shows the filename and the size, separated with "=":
ls -al | awk '{for (i=9; i<=NF; i++) printf $i " "; print "= " $5}'
Because the filename can contain spaces we need to show all columns after, and including, column 9.

Note 1: This works because the file name is the last field returned by "ls".
Note 2: The variable "NF" is built into awk and stores the number of fields.
Note 3: The "printf" awk command displays text without a line break.

You can use a different column separator (instead of the default whitespace) by using the "-F" option.

Here's an example:
echo "1,2,3,4,5,666,7,888,9" | awk -F"," '{print $7 " " $5 " " $6}'
Returns "7 5 666"


[Up]

[Contact][Server Blog][AntiMS Apple][Served on Mac]