Difference between revisions of "Awk"
From Hackepedia
Jump to navigationJump to searchm (changing from 1st person) |
m (one per row) |
||
Line 1: | Line 1: | ||
+ | == Awk and /etc/passwd == | ||
+ | |||
It's usually a better idea to use one command instead of using a [[pipe]] to another command, where possible. A common mistake: | It's usually a better idea to use one command instead of using a [[pipe]] to another command, where possible. A common mistake: | ||
# grep root /etc/passwd | awk -F: '{print $7}' | # grep root /etc/passwd | awk -F: '{print $7}' | ||
Line 7: | Line 9: | ||
/bin/bash | /bin/bash | ||
+ | |||
+ | == Awk and ps == | ||
Say you wanted to find out how much resident memory [[xfce4]] was using on your system, and it appears most xfce applications start with "xf": | Say you wanted to find out how much resident memory [[xfce4]] was using on your system, and it appears most xfce applications start with "xf": | ||
Line 24: | Line 28: | ||
''N.B.'' This can be misleading in the case of programs that use large amounts of shared memory (like java). | ''N.B.'' This can be misleading in the case of programs that use large amounts of shared memory (like java). | ||
+ | |||
+ | == Awk and multi-row documents == | ||
+ | |||
+ | pretend you have a file that has IP numbers where multiple can be on one row and you need to | ||
+ | flatten these into 1 per row here is how the solution looks like: | ||
+ | |||
+ | francisco$ cat ipfile | ||
+ | 192.168.0.1 | ||
+ | 192.168.0.2 192.168.0.3 | ||
+ | 10.0.0.1 10.0.0.2 10.0.0.3 | ||
+ | |||
+ | francisco$ awk '{ for (i = 1; i <= NF ; i++) print $i; }' ipfile | ||
+ | 192.168.0.1 | ||
+ | 192.168.0.2 | ||
+ | 192.168.0.3 | ||
+ | 10.0.0.1 | ||
+ | 10.0.0.2 | ||
+ | 10.0.0.3 |
Revision as of 04:50, 2 July 2008
Awk and /etc/passwd
It's usually a better idea to use one command instead of using a pipe to another command, where possible. A common mistake:
# grep root /etc/passwd | awk -F: '{print $7}' /bin/bash
which can be easily done all in awk:
# awk -F: '/root/ {print $7}' /etc/passwd /bin/bash
Awk and ps
Say you wanted to find out how much resident memory xfce4 was using on your system, and it appears most xfce applications start with "xf":
$ ps auwx | awk '/xf/{print $5}' 15924 14668 11948 11764 12944 16264 1860
If you wanted to use awk to add the results together instead of doing it manually:
$ ps auwx | awk '/xf/{ tot += $5 } END { print tot }' 69108
N.B. This can be misleading in the case of programs that use large amounts of shared memory (like java).
Awk and multi-row documents
pretend you have a file that has IP numbers where multiple can be on one row and you need to flatten these into 1 per row here is how the solution looks like:
francisco$ cat ipfile 192.168.0.1 192.168.0.2 192.168.0.3 10.0.0.1 10.0.0.2 10.0.0.3
francisco$ awk '{ for (i = 1; i <= NF ; i++) print $i; }' ipfile 192.168.0.1 192.168.0.2 192.168.0.3 10.0.0.1 10.0.0.2 10.0.0.3