输出打印区域的第一列和第5列
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
#输出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 |