Awk: Difference between revisions
Appearance
No edit summary |
No edit summary |
||
(7 intermediate revisions by the same user not shown) | |||
Line 9: | Line 9: | ||
to filter out comment lines - starting with # | to filter out comment lines - starting with # | ||
$ awk '/^[^#]/ {print $2}' /etc/fstab | $ awk '/^[^#]/ {print $2}' /etc/fstab | ||
to grep on TWO occurences (AND operator) | |||
$ awk '/pattern1/ && /pattern2/' /var/log/messages | |||
case insensitive | |||
$ awk '/pattern1/ && /pattern2/' IGNORECASE=1 /var/log/messages | |||
Line 49: | Line 56: | ||
use awk with a program | ==use awk with a program== | ||
the file '''maxuid''': | the file '''maxuid''': | ||
Line 58: | Line 65: | ||
then use awk like this: | then use awk like this: | ||
$ awk -f maxuid /etc/passwd | $ awk -f maxuid /etc/passwd | ||
to ignore user nobody: | |||
<pre>BEGIN {maxuid = 0; FS=":" } | |||
$1 != "nobody" { if ($3 > maxuid) maxuid = $3 } | |||
END { print" the largest UID is ", maxuid } | |||
</pre> | |||
cat -n: (adds line numbers) | |||
$ awk '{ print NR, $0}' /etc/fstab | |||
wc -w: (count words) | |||
$ awk '{ w += NF } END { print w}' /etc/fstab | |||
grep chris /etc/passwd: | |||
$ awk '/^chris/' /etc/passwd | |||
==writing self contained scripts== | |||
<pre> | |||
#!/usr/bin/awk -f | |||
{ cost[$1] += $2*$4 } | |||
END { for (cat in cost) print cat, cost[cat] } | |||
</pre> | |||
chmod u+x catscript | |||
./catscript | |||
http://www.pement.org/awk/awk1line.txt |
Latest revision as of 08:42, 29 July 2015
awk
pattern {action} pattern {action}
$ awk '{print $2}' /etc/fstab
to filter out comment lines - starting with #
$ awk '/^[^#]/ {print $2}' /etc/fstab
to grep on TWO occurences (AND operator)
$ awk '/pattern1/ && /pattern2/' /var/log/messages
case insensitive
$ awk '/pattern1/ && /pattern2/' IGNORECASE=1 /var/log/messages
print first field from password file using field seperator ':'
$ awk -F: '{print$1}' /etc/passwd
print only user ID > 500
$ awk -F: '$3>=500 {print$1}' /etc/passwd
display average of numbers entereed on a line:
$ awk '{ sum=0; for (i=1; i<=NF; i++) sum +=$i; print sum/NF; }'
NF | number of fields in the current line |
NR | the current record number (line number) |
FS | input field seperator (space by default) |
RS | record seperator (newline by default) |
Example | Example |
Example | Example |
Example | Example |
Example | Example |
Example | Example |
show the 5th record on the second line:
df /tmp | awk 'NR==2 {print$5 }'
use awk with a program
the file maxuid:
BEGIN {maxuid = 0; FS=":" } { if ($3 > maxuid) maxuid = $3 } END { print" the largest UID is ", maxuid }
then use awk like this:
$ awk -f maxuid /etc/passwd
to ignore user nobody:
BEGIN {maxuid = 0; FS=":" } $1 != "nobody" { if ($3 > maxuid) maxuid = $3 } END { print" the largest UID is ", maxuid }
cat -n: (adds line numbers)
$ awk '{ print NR, $0}' /etc/fstab
wc -w: (count words)
$ awk '{ w += NF } END { print w}' /etc/fstab
grep chris /etc/passwd:
$ awk '/^chris/' /etc/passwd
writing self contained scripts
#!/usr/bin/awk -f { cost[$1] += $2*$4 } END { for (cat in cost) print cat, cost[cat] }
chmod u+x catscript ./catscript