- awk 按照行处理的脚本
- 指定分隔符
用-F指定一个或者多个
cat test.csv | awk -F"," '{print $2,$3}' ----------------我习惯与用管道如此写:
也可以用BEGIN块+FS来处理,OFS表示输出的分隔符
awk 'BEGIN{FS=",";OFS=";" }{ print $1,$2}'
cat test.csv | awk -F"[,;]" '{print $2,$3}'
BEGIN 和END修饰块,表示只处理一次。
- 求和(简单的运算都可以)
对第4列求和,并打印值,分隔符为逗号
BEGIN和END预处理块,只执行一次,即处理开始前,和结束后
cat gridclass.result| awk -F ',' 'BEGIN{a=0}{a+=$4}END{print a}'
- 统计出现次数,或者累加,类似于sql 语句的count (XX) groupby
$ cat nayan.out
saman 1
gihan 2
saman 4
ravi 1
ravi 2
$ cat nayan.out|awk '{arr[$1]+=$2} END {for (i in arr) {print i,arr[i]}}'
如果只统计某一列出现的次数:两种方式,第一种要慢一些
(1)sort|uniq -c
[root@localhost server]# head stat.csv
1372409504,0,191,381,beg,bus
1372409504,0,268,376,bus,sub
1372409504,0,15,15,sub,end
1372409504,1,191,381,beg,bus
1372409504,1,387,377,bus,sub
1372409504,1,15,15,sub,end
1372409504,2,191,381,beg,bus
1372409504,2,270,473,bus,end
1372409504,3,178,352,beg,bus
1372409504,3,447,468,bus,sub
统计第5列各个字符出现的次数
用sort|uniq -c
[root@localhost server]# cat stat.csv |awk -F ',' '{print $5}'|sort|uniq -c
272509 beg
400202 bus
64826 sub
(2)awk的结果
cat stat.csv |awk -F ',' '{arr[$5]+=1} END{for (no in arr) {print no,arr[no]} }'
beg 272509
sub 64826
bus 400202
如果需要按某一列中提取某个字符,然后统计
[root@localhost logs]# head 2013-07-01.csv
2013-7-1 12:54:02,沪FM1035
2013-7-1 12:43:37,京BR6716
统计各地方的牌照个数:
[root@localhost logs]# awk -F ',' '{print substr($2,1,1)}' 2013-07-01.csv|sort|uniq -c
102418 川
261066 鄂
601 颚
39 贵
789109 沪
233 吉
407 冀
68218 津
404 晋
1380934 京
52852 辽
2382 鲁
44183 闽
89263 陕
184979 苏
546 湘
30 于
108413 渝
10 豫
176184 粤
273243 浙
本文介绍了如何使用awk脚本来处理CSV格式的数据,通过指定分隔符如逗号或分号,提取特定列,并展示了如何进行简单的计算如求和。此外,还提及了BEGIN和END块的使用,以及对某一列数据出现次数的统计方法。
5827

被折叠的 条评论
为什么被折叠?



