awk命令

1.统计求和

[bsjk@izbp172ujoo5u74o1tpjqdz 1]$ more test 
AB,B1,B2,B3,B4,B5
A1,1,2,3,4,5
A2,2,1,1,1,1
A3,3,1,1,1,1
A4,4,1,1,1,1
A5,5,1,1,1,1

1.1 按列求和

  1. 统计某列数值之和
#非数字类型当成0计算
awk -F' ' '{sum1+=$1;sum2+=$2}END{print sum1,sum2}' test
#0 15
  1. 统计所有列
#输出求和行
awk -F',' '{for(i=1;i<=NF;i++)sum[i]+=$i}END{for(j=1;j<=NF-1;j++)printf sum[j]",";if(k=NF)print sum[k]}' test
结果:0,15,6,7,8,9

#输出第一行和求和行
awk -F',' '{if(NR==1)print}{for(i=1;i<=NF;i++)sum[i] += $i}END{for(j=1;j<=NF-1;j++)printf sum[j]",";if(k=NF)print sum[k]}' test
结果是: 
AB,B1,B2,B3,B4,B5
0,15,6,7,8,9

1.2 按行求和

  1. 统计每一行数值的总和
 awk -F',' '{{for(i=1;i<=NF;i++)a[NR]+=$i}print $1,a[NR]}' test
结果是:
AB 0
A1 15
A2 6
A3 7
A4 8
A5 9

2. 特殊模式BEGIN和END

  • BEGIN 和 END,BEGIN 被放置在没有读取任何数据之前,而 END 被放置在所有的数据读取完成以后执行。

  • 体现如下:
    BEGIN{}: 读入第一行文本之前执行的语句,一般用来初始化操作
    {}: 逐行处理
    END{}: 处理完最后以行文本后执行,一般用来处理输出结果

  • 实例:
    文件开头加START,末尾加END,打印行号和内容

awk -F',' 'BEGIN{print "START"}{print NR;print}END{print "END"}' test 
#START
1
AB,B1,B2,B3,B4,B5
2
A1,1,2,3,4,5
3
A2,2,1,1,1,1
4
A3,3,1,1,1,1
5
A4,4,1,1,1,1
6
A5,5,1,1,1,1
END

3. Built-in Variables

NF( Number of Fields ) : awk 读入一行数据的字段数,通俗地说,就是一行数据被划分成了几段?便于对各字段进行遍历。
NR( Number of Records ) : awk 已读入的行数,相当于一个计数器。
RS( Record Separator ) : 行分隔符。awk从文件上读取资料时, 将根据 RS 的定义把资料切割成许多Records,而awk一次仅读入一个Record,以进行处理。预设值是’\n’
FS( Field Separator ) : 列分割符。决定了怎么将一行划分为几段。预设值是空白符(空白和Tab)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值