awk 指定分隔符,读取csv格式的某些列

本文介绍了如何使用awk脚本来处理CSV格式的数据,通过指定分隔符如逗号或分号,提取特定列,并展示了如何进行简单的计算如求和。此外,还提及了BEGIN和END块的使用,以及对某一列数据出现次数的统计方法。
  • awk 按照行处理的脚本
  • 指定分隔符
如:以逗号分割,打印2,3列

用-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 浙
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值