######awk报告生成器#####
注意:它无所谓空格多长,无论空格多长都默认为1个空格
awk处理机制:
根据模式一次从文件中抽取一行文本,对这行文本进行切片(默认使用空白字符作为分隔符)
编写脚本test:
this is a file
$1 $2 $3 $4
测试:
awk '{print $1,$2}' test ##显示两个字段
awk -F ":" '{print $1,$3}' /etc/passwd ##指定分隔符
#awk常用变量
awk '{print FILENAME,NR}' /etc/passwd ##输出文件名,和当前操作的行号
cat /etc/passwd | wc -l //查看/etc/passwd 一个有多少行
awk -F: '{print NR,NF}' /etc/passwd ##输出每次处理的行号,以及当前以":"为分隔符的字段个数
总结:awk '{print "第NR行","有NF列"}' /etc/passwd
BEGIN END
{}:逐行处理
BEGIN{}:读入第一行文本之前执行的语句,一般用来初始化操作
END{}:处理完最后以行文本后执行,一般用来处理输出结果
awk 'BEGIN { a=34;print a+10 }'
awk -F: 'BEGIN{print "REDHAT"} {print NR;print } END {print "WESTOS"}' passwd ##文件开头加REDHAT,末尾加WESTOS,打印行号和内容
测试:
awk -F: '/bash$/{print}' /etc/passwd ##输出以bash结尾的
awk -F: 'NR==3 {print}' /etc/passwd ##显示第三行
awk -F: 'NR % 2 == 0 {print}' /etc/passwd ##偶数行
awk -F: 'NR >=3 && NR <=5 {print }' /etc/passwd //输出第三行到第五行
awk 'BEGIN{i=0}{i+=NF}END{print i}' linux.txt ##统计文本总字段个数
练习题:列出uid小于2的用户,只要输出用户名和uid