学习awk

来源:互联网 发布:mac文件夹图片用照片 编辑:程序博客网 时间:2024/05/17 03:28
awk [-F  field-separator] 'script' file(s)
awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",-F ':'自定义间隔符':'


假设有数据文件city_code.txt数据如下

jilin:Liao_Yuan_Shi:吉林省-辽源市:0guizhou:Bi_Jie_Di_Qu:贵州省-毕节地区:206ningxia:Yin_Chuan_Shi:宁夏回族自治区-银川市:360hubei:Wu_Han_Shi:湖北省-武汉市:218anhui:Huang_Shan_Shi:安徽省-黄山市:252……

打印汉字城市名:
awk -F ':' '{print $3}' city_code.txt |awk -F '-' '{print $2}'

首先用 awk -F ':' '{print $3}' city_code.txt 以":"间隔打印出类似
吉林省-辽源市
贵州省-毕节地区
宁夏回族自治区-银川市
湖北省-武汉市
安徽省-黄山市
……
再用awk -F '-' '{print $2}'以"-"打印出市名

辽源市
毕节地区
银川市
武汉市
黄山市
……


打印文件有用Tab间隔开

head -5 city_code.txt|awk -F ':' 'BEGIN{print "province\tcity\tcity_code"}{print $1"\t"$2"\t"$4}END{print "that is all" }'

统计编号的和
awk -F ':' 'BEGIN{sum=0}{sum +=$4} END{print sum }' city_code.txt
执行顺序是,首先运行BEGIN的内容初始化sum,然后读入每行数据,去$4也就是城市编号加到sum中 读完所有数据以后打印出sum

以上两个综合在一起
head -5 city_code.txt|awk -F ':' 'BEGIN{sum=0;print "province\tcity\tcity_code"}{sum+=$4;print $1"\t"$2"\t"$4}END{print "that is all,sum ="sum }'

打印出安徽省所有市
awk '/anhui/' city_code.txt

打印出安徽省的所有市,并统计编号和

awk -F ':' 'BEGIN{sum=0;print "province\tcity\tcity_code"}/anhui/{sum+=$4;print $1"\t"$2"\t"$4}END{print "that is all,sum ="sum }' city_code.txt


0 0