`

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

阅读更多
  • 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 浙
分享到:
评论

相关推荐

    AWK中FNR和NR,OFS和FS,RS和ORS.txt

    当AWK打印或输出记录时,它会在每个记录后插入ORS指定的字符或字符串作为分隔符。这在需要定制输出格式时非常有用,比如使用`|`作为分隔符以生成CSV格式的输出。 ### FS (Field Separator) **FS** 是字段分隔符,...

    Linux实战awk详解

    Awk读取输入文件(或者标准输入),按照指定的分隔符将每一行分割成字段,并对每个字段执行预定义的动作。默认情况下,awk使用空格或制表符作为字段分隔符,但你可以根据需求自定义分隔符。 在awk中,程序通常包含...

    awk学习awk学习awk学习awk学习

    6. **字段分隔符**: awk默认以空格或制表符作为字段分隔符,但可以通过指定FS(Field Separator)来改变这一设置。 ```sh awk -F':' '{ print $1 " " $3 }' /etc/passwd ``` 上述命令将打印出`/etc/passwd`文件...

    awk教程-awk教程.rar

    - **内置变量**:如NR(已读取的行数)、NF(当前行的字段数)、FS(字段分隔符)等。 - **函数**:awk提供了内置的数学和字符串处理函数,如length()、split()、substr()等。 - **自定义函数**:可以创建用户...

    awk实例详解——Unix下awk的使用

    但可以通过`-F`选项或内部变量`FS`自定义分隔符,如`awk -F: '{print $1}'`以冒号为分隔符打印第一列。 **3. 内置变量** `awk`提供了许多内置变量,如`NF`表示当前行的字段数,`NR`表示已读取的记录数(行数),`...

    AWK Tutorial Guide

    2. 字段分隔符:默认情况下,AWK将空格或制表符作为字段分隔符,但可以自定义字段分隔符,如使用FS变量。 3. 正则表达式:AWK支持正则表达式,允许对文本进行复杂的模式匹配。 4. 动态编程:AWK允许在脚本中编写函数...

    awk.cheat.sheet

    该变量定义了 AWK 在输出记录时使用的分隔符。 - 支持情况:AWK、NAWK、GAWK 7. **FILENAME**:当前输入文件的名称。如果没有指定文件,则该值为 "-"。需要注意的是,在 BEGIN 块中 FILENAME 是未定义的(除非通过...

    awk实用手册

    awk的工作原理是基于行的处理,它会读取输入文件的一行一行,然后根据指定的模式(pattern)进行匹配,并执行相应的动作(action)。基本语法是`awk 'pattern {action}' file`。例如,`awk '/pattern/ {print $0}' ...

    awk 使用手册

    这会将逗号作为字段分隔符,打印CSV文件的第一列。 ### 3. 内置变量 `awk`有许多内置变量,如`NR`(行号)、`NF`(字段数量)、`$0`(当前行)、`$1`、`$2`...(当前行的各字段)。例如: ```bash awk '{ print NR, NF,...

    AWK学习笔记.doc

    AWK有预定义的变量,如`$0`代表当前记录(整行),`$1`到`$n`代表字段(按空格或制表符分隔)。用户也可以自定义变量。 **一.8 运算与判断** AWK支持算术运算、关系运算和逻辑运算,以及条件语句(`if...else`)和...

    sed与awk(第二版)

    awk的默认分隔符是空格或制表符,但用户可以根据需要自定义分隔符。以下是一个简单的awk示例,它打印出文件中所有第三列值大于5的行: ```bash awk '$3 > 5' filename ``` awk的语法允许用户编写复杂的逻辑,如...

    shell awk实用实例教程

    1. **字段分隔符(Field Separators)**:默认情况下,Awk将空格或制表符作为字段分隔符。你可以使用`-F`选项自定义分隔符,例如`awk -F ":"`将用冒号分隔字段。 2. **模式匹配**: Awk中的模式可以是正则表达式,...

    LINUX下awk命令详解

    - `-F` 或 `--field-separator`:指定字段分隔符,默认为空白字符。 - `-v` 或 `--assign`:为变量赋值。 - `-f` 或 `--file`:指定包含 `awk` 程序的文件。 例如,如果想要设置以逗号作为字段分隔符,并且打印文件...

    AWK脚本开发教程(深入)

    AWK可以处理带有字段分隔符的数据,通过`-F`选项设置字段分隔符。例如,`awk -F":" '{ print $1 }' /etc/passwd`会打印出/etc/passwd文件中每一行的第一个字段,即用户名,因为在这里":"被设为字段分隔符。如果想...

    sed and awk 101 hacks.pdf

    awk可以按指定分隔符分割每一行,并对每个字段进行操作。awk程序通常包含模式(匹配条件)和动作,当一行满足某个模式时,就会执行相应的动作。awk还支持变量、函数和控制结构,使得处理复杂的数据逻辑变得简单。 ...

Global site tag (gtag.js) - Google Analytics