awk单独拿出来写了这篇笔记是因为它是在太强大了,简直就是一门脚本语言。
入门篇
# 数值计算
echo | awk '{print 19+7}' # 25
# 字符分割,-F指定分割符号,下例为"_"。如果不指定-F参数则使用空格分割
echo A_B_C | awk -F "_" '{print $1}' # A
#字符串函数
echo "apple banana dog" | awk '{print substr($1, 1, 5) }' # apple
#求和,对my.txt的第一列数值求和:
my.txt
-----
1 a
2 b
3 c
cat my.txt | gawk '{ sum += $1 }; END { print sum }'
# 计算平均数
cat count.txt | awk '{sum+=$1} END {print "avg=", sum/NR}'
echo | awk '{print 19+7}' # 25
# 字符分割,-F指定分割符号,下例为"_"。如果不指定-F参数则使用空格分割
echo A_B_C | awk -F "_" '{print $1}' # A
#字符串函数
echo "apple banana dog" | awk '{print substr($1, 1, 5) }' # apple
#求和,对my.txt的第一列数值求和:
my.txt
-----
1 a
2 b
3 c
cat my.txt | gawk '{ sum += $1 }; END { print sum }'
# 计算平均数
cat count.txt | awk '{sum+=$1} END {print "avg=", sum/NR}'
应用笔记
# 字符串分割。根据"_"
ls | awk -F "_" '{print $1F}'
#删除某列,并输出
zcat xx.gz | awk '{$1 = null ;print}'
#输出最后一列
cat a.txt | awk '{print $NF}')
#输出倒数第二列
cat a.txt | awk '{print $(NF-1)}')
ls | awk -F "_" '{print $1F}'
#删除某列,并输出
zcat xx.gz | awk '{$1 = null ;print}'
#输出最后一列
cat a.txt | awk '{print $NF}')
#输出倒数第二列
cat a.txt | awk '{print $(NF-1)}')
求和、求平均数
# cat inputfile
1 50
2 30
3 20
4 50
# awk -F' ' '{sum+=$2;count+=1} END{print "SUM:"sum"\nAVG:"sum/count}' inputfile
SUM:150
AVG:37.5
1 50
2 30
3 20
4 50
# awk -F' ' '{sum+=$2;count+=1} END{print "SUM:"sum"\nAVG:"sum/count}' inputfile
SUM:150
AVG:37.5
变量名 含义
ARGC 命令行变元个数
ARGV 命令行变元数组
FILENAME当前输入文件名
FNR 当前文件中的记录号
FS 输入域分隔符,默认为一个空格
RS 输入记录分隔符
NF 当前记录里域个数
NR 到目前为止记录数
OFS 输出域分隔符
ORS 输出记录分隔符