awk是一个非常棒的数据处理工具,相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分成数个“字段”来处理。因此,awk相当适合于处理小型的数据处理。
下面是我写的测试脚本:
#!/bin/sh
#测试awk的通用模式
#awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
echo -e "\n测试awk的通用模式!" #必须加上转义-e,否则无法换行
cat data.txt | \
awk 'BEGIN {FS=":"} $3<10 {print $1 "\t" $3}' #注意:动作都是在{}里面,条件不必
#测试awk的计算功能
echo -e "\n测试awk计算功能!"
cat pay.txt | \
awk 'NR==1 {printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"} NR>=2 {total=$2+$3+$4
printf "%10s %10s %10s %10s %10.2f\n",$1,$2,$3,$4,total}' #注意:如果有需要多个命令辅助时,可利用";"间隔或者直接回车来隔开命令
#测试awk的变量和赋值
echo -e "\n测试awk的变量和赋值功能!"
awk '{count++;print $0;}
END{print "user count is ",count}' pay.txt #$0表示一个记录,即一行
#测试数组及for循环
echo -e "\n测试数组及for循环!"
cat /etc/passwd | \
awk 'BEGIN{FS=":";count=0;}
{name[count]=$1;count++;}
END{for(i=0;i<NR;i++) print i,name[i]}'
pay.txt如下:
Name 1st 2nd 3th
VBird 23000 24000 25000
DMTsai 21000 20000 23000
Bird2 43000 42000 41000