awk的小例子

文本:
  1. 10 11 12 13 14
  2. 15
  3. 16 17 18 19
  4. 20 21
  5. 22 23 24 25
复制代码
1) 每行字段数
  1. awk '{print NF}' file                     
  2. 5
  3. 1
  4. 4
  5. 2
  6. 4
复制代码
2) 最大字段数
  1. awk '{x=x<NF?NF:x}END{print x}' file
  2. 5
复制代码
3) 总共字段个数
  1. awk '{x+=NF}END{print x}' file
  2. 16
复制代码
4) 所有字段的总和
  1. awk '{for(i=1;i<=NF;i++)x+=$i}END{print x}' file
  2. 280
复制代码
5) 各行的总和
  1. awk '{x=0;for(i=1;i<=NF;i++){x+=$i};print x}' file
  2. 60
  3. 15
  4. 70
  5. 41
  6. 94
复制代码
6) 各列的总和
  1. awk '{for(i=1;i<=NF;i++)a[i]+=$i}END{l=length(a);for(j=1;j<=l;j++) printf a[j]" ";printf "\n"}' file
  2. 83 72 54 57 14
复制代码
7) 行列交换
  1. awk '{for(i=1;i<=NF;i++)a[NR,i]=$i;x=x<NF?NF:x}END{for(i=1;i<=x;i++){for(j=1;j<=NR;j++){if(length(a[j,i]))printf a[j,i]" "};printf "\n"}}' file
  2. 10 15 16 20 22
  3. 11 17 21 23
  4. 12 18 24
  5. 13 19 25
  6. 14
复制代码
或者以空格补齐空白处
  1. awk '{for(i=1;i<=NF;i++)a[NR,i]=$i;x=x<NF?NF:x}END{for(i=1;i<=x;i++){for(j=1;j<=NR;j++){printf length(a[j,i])?a[j,i]" ":"   "};printf "\n"}}' file
  2. 10 15 16 20 22
  3. 11    17 21 23
  4. 12    18    24
  5. 13    19    25
  6. 14   
复制代码

简单做个总结,希望有用的朋友保留。欢迎大家指出漏洞和不足。

转载:http://bbs.chinaunix.net/thread-2318658-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值