awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
last -n5|awk ‘{print $1}‘ #last -4 也行
cat /etc/passwd |awk -F ‘:‘ ‘{print $1}‘ #等于 cat /etc/passwd |cut -d‘:‘ -f1 显示/etc/passwd的账户 awk -F: ‘{print $1}‘ 也行
cat /etc/passwd |awk -F ‘:‘ ‘{print $1"\t"$7}‘ #显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
cat /etc/passwd |awk -F ‘:‘ ‘BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}‘ #显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。 BEGIN END 注意是大写 工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作
搜索/etc/passwd有root关键字的所有行 #搜索支持正则,例如找root开头的: awk -F: ‘/^root/‘ /etc/passwd
#awk -F: ‘/root/‘ /etc/passwd
统计某个文件夹下的文件占用的字节数
ls -l |awk ‘BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}‘[end]size is 8657198
如果以M为单位显示:
ls -l |awk ‘BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size/1024/1024,"M"}‘ [end]size is 8.25889 M
注意,统计不包括文件夹的子目录。
统计某个文件夹下的文件占用的字节数,过滤4096大小的文件(一般都是文件夹):
ls -l |awk ‘BEGIN {size=0;print "[start]size is ", size} {if($5!=4096){size=size+$5;}} END{print "[end]size is ", size/1024/1024,"M"}‘ [end]size is 8.22339 M
显示/etc/passwd的账户
awk -F ‘:‘ ‘BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}‘ /etc/passwd 0 root 1 daemon 2 bin 3 sys 4 sync 5 games ......