文章目录
awk 擅长文件格式化,经常在复杂文件处理上用的上,也往往也是一道shell编程常见面试题
1.文件处理
[root@egrep ~]# echo "hello world" > test
[root@egrep ~]# awk '{print}' test
hello world
[root@egrep ~]# print '{print $1}' test
hello
2.与磁盘命令组合使用
[root@egrep ~]# df -h
第一列 第二列 第三列 第四列 第五列 第六列
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 40G 2.4G 35G 7% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 408K 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 783M 0 783M 0% /run/user/0
[root@egrep ~]# df -h | awk '{print $5}'
Use%
7%
0%
0%
1%
0%
0%
也可以组合打印两列数据
df -h | awk '{print $1,$2}'
3.统计
awk脚本
#运行前
BEGIN{
MATH = 0
ENGLISH = 0
COMPUTER = 0
printf "NAME NO MATH ENGLISH COMPUTER TOTAL\n"
printf "--------------------------------------------------\n"
#运行中
MATH += $3
ENGLISH += $4
COMPUTER += $5
printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3, $4, $5, $3+$4+$5
}
#运行后
END{
printf "--------------------------------------------------\n"
printf " TOTAL:%10d %8d %8d \n", MATH, ENGLISH, COMPUTER
printf "AVERAGE:%10.2f %8.2f %8.2f\n", MATH/NR, ENGLISH/NR
}
变量 | 描述 |
---|---|
NF | 该变量包含每个记录的字段个数。 |
NR | 该变量包含当前的记录个数 |
FS | 该变量是字段分隔符 |
RS | 该变量是记录分隔符 |
OFS | 该变量是输出字段分隔符 |
ORS | 该变量是输出记录分隔符 |
FILENAME | 该变量包含所读取的输入文件的名称 |
IGNORECASE | 当 IGNORECASE 设置为非空值 ,GAWK 将忽略模式匹配中的大小写。 |