输出打印区域的第一列和第5列
例如:
[bash]#输出df -h的文件系统和已使用百分比
df -h |awk '{print $1 "\t" $5}'
#输出
文件系统 已用%
/dev/hda6 40%
tmpfs 0%
udev 7%
tmpfs 1%
#对结果剪切
df -h |awk '{print $1 "\t" $5}'|tail -4
#输出
/dev/hda6 40%
tmpfs 0%
udev 7%
tmpfs 1%
#把上面输出第二列的值按照数字排序
df -h |awk '{print $1 "\t" $5}'|tail -4|sort -nk 2
#输出
/dev/hda6 40%
udev 7%
tmpfs 1%
tmpfs 0%
#查看hda6的容量,使用正则表达式匹配
#斜杠也需要转义,因为对于 awk 它们有着特殊的含义。
df -h | awk '/dev\/hda6/ { print $1 "\t: " $5 }
#输出
/dev/hda6 : 40%
#另一个正则表达式例子
ls -l|awk '/(a|h).*\.deny$/ {print $0}'
#输出
-rw-r----- 1 root daemon 144 2008-10-20 at.deny
-rw-r--r-- 1 root root 878 11-05 00:43 hosts.deny
#在输出前后加上文字
ls -l | awk 'BEGIN { print "Files found:\n" } /(a|h).*\.deny$/ {print $0} END { print "\nThat is all!" }'
#输出
Files found:
-rw-r----- 1 root daemon 144 2008-10-20 at.deny
-rw-r--r-- 1 root root 878 11-05 00:43 hosts.deny
That is all!
#中括号内可以是其他命令;比如调用printf
#现有如下输出
ProductA 30
ProductB 76
ProductC 55
#使用awk选出<75的行,并且在后面添加标注( 想起Python了吗)
awk '$2<75 {printf "%s\t%s\n", $0, "REORDER";} $2>=75 {print $0;}' test.txt
#输出
ProductA 30 REORDER
ProductB 76
ProductC 55 REORDER
#可以使用内部变量
awk '{x=$2+1;} END {print x;}' test.txt
#输出
56
#awk常用的内建变量
#FILENAME 当前输入文件的文件名,该变量是只读的
#NR 当前行的行号,该变量是只读的,R代表record
#NF 当前行所拥有的列数,该变量是只读的,F代表field
#OFS 输出格式的列分隔符,缺省是空格
#FS 输入文件的列分融符,缺省是连续的空格和Tab
#ORS 输出格式的行分隔符,缺省是换行符
#RS 输入文件的行分隔符,缺省是换行符
#比如 /etc/passwd使用: 来分割列,要想输出列,必须把列分隔符换成:
awk 'BEGIN {FS=":"} {print $1;}' /etc/passwd
#输出的就是用户名
#分割符也可使用-F参数指定
#例如awk -F '\'
#if结构
awk '{if($2=="'30'") print $1,$2}' test.txt
#输出
ProductA 30
[/bash]
@freetstar
什么?
sed&awk 好书