sed && awk (3)====awk 的十道逻辑题

简介:

这不是我总结的,但我觉得总结的很好,所以把它放在博客里希望更多人看到。


#awk之行与列的count & sum命令总汇

#有一个文件file,内容如下:

10 11 12 13 14

15

16 17 18 19

20 21

22 23 24 25


#需求一:每行字段数

5

1

4

2

4


**方法一:[root@ /tmp/cdly]# awk '{print NF}' file


#需求二:最大字段数

5


**方法一:[root@ /tmp/cdly]# awk 'NF>max{max=NF}END{print max}' file


#需求三:总共字段个数

16


**方法一:[root@ /tmp/cdly]# awk '{a+=NF}END{print a}' file


#需求四:所有字段的总和

280


**方法一:[root@ /tmp/cdly]# awk '{for(i=1;i<=NF;i++){a+=$i}}END{print a}' file 


#需求五:各行字段的总和

60

15

70

41

94


**方法一:[root@ /tmp/cdly]# awk '{a=0;for(i=1;i<=NF;i++){a+=$i};print a}' file


#需求六:各列的总和

83 72 54 57 14


**方法一:[root@ /tmp/cdly]# awk '{for(i=1;i<=NF;i++)a[i]+=$i}END{for(i in a)printf a[i]" ";print ""}' file #输出结果是无须的

**方法二:[root@ /tmp/cdly]# 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

**方法三:[root@ /tmp/cdly]# awk '{for(i=1;i<=NF;i++)a[i]+=$i}END{for(i=1;i<=asorti(a,b);i++)printf a[b[i]]" ";print ""}' file


#需求七:每行的最大值

14

15

19

21

25


**方法一:[root@ /tmp/cdly]# awk '{for(i=1;i<=NF;i++){if($i>max){max=$i}}print max;max=0}' file


#需求八:每列的最大值

22 23 24 25 14


**方法一:[root@ /tmp/cdly]# awk 'NF>max{max=NF}{for(i=1;i<=NF;i++)a[NR,i]=$i}END{for(i=1;i<=max;i++){for(j=1;j<=NR;j++){if(a[j,i]>b){b=a[j,i]}}printf b" ";b=""}print ""}' file


#需求九:行列交换

10 15 16 20 22 

11 17 21 23 

12 18 24 

13 19 25 

14


**方法一:[root@ /tmp/cdly]# awk '{for(i=1;i<=NF;i++)a[NR,i]=$i}END{for(i=1;i<=NR;i++){for(j=1;j<=NR;j++){if(a[j,i]){printf a[j,i]" "}}print ""}}' file


#需求十:行列交换并且以空格补齐空白处

10 15 16 20 22 

11   17 21 23 

12   18   24 

13   19   25 

14


**方法一:[root@ /tmp/cdly]# awk '{for(i=1;i<=NF;i++)a[NR,i]=$i}END{for(i=1;i<=NR;i++){for(j=1;j<=NR;j++){if(a[j,i]){printf a[j,i]" "}else{printf "   "}}print ""}}' file

**方法二:[root@ /tmp/cdly]# awk '{for(i=1;i<=NF;i++)a[NR,i]



本文转自 大雪儿 51CTO博客,原文链接:http://blog.51cto.com/dingxue/1971269,如需转载请自行联系原作者=$i}END{for(i=1;i<=NR;i++){for(j=1;j<=NR;j++){printf "%-3s",a[j,i]}print ""}}' file

相关文章
|
Shell 测试技术
Airtest如何自动连接重启后的设备并继续执行自动化脚本呢?
Airtest如何自动连接重启后的设备并继续执行自动化脚本呢?
340 0
|
前端开发 Java 关系型数据库
基于SSM框架的管理系统【完整项目源码】
基于SSM框架的管理系统【完整项目源码】
基于SSM框架的管理系统【完整项目源码】
|
9月前
|
固态存储 虚拟化 iOS开发
VMware ESXi 6.7U3u macOS Unlocker & OEM BIOS 2.7 集成 Realtek 网卡驱动和 NVMe 驱动 (集成驱动版)
VMware ESXi 6.7U3u macOS Unlocker & OEM BIOS 2.7 集成 Realtek 网卡驱动和 NVMe 驱动 (集成驱动版)
389 1
VMware ESXi 6.7U3u macOS Unlocker & OEM BIOS 2.7 集成 Realtek 网卡驱动和 NVMe 驱动 (集成驱动版)
|
9月前
|
SQL 数据可视化 atlas
低空经济新基建!DataV Atlas 如何用大模型玩转空间数据?
阿里云DataV Atlas推出搭载通义千问最新2.5 Max大模型「时空SQL智能小助手」,通过自然语言生成专业SQL,简化空间数据分析流程,助力智慧农田、城市低空交通及应急调度等领域,推动精准决策和智能化管理。零门槛体验空间智能分析革命,开启“会思考的天空网络”新时代。
669 5
低空经济新基建!DataV Atlas 如何用大模型玩转空间数据?
|
IDE Linux KVM
云计算|OpenStack|社区版OpenStack安装部署文档(十二--- openstack的网络模型解析---Rocky版)
云计算|OpenStack|社区版OpenStack安装部署文档(十二--- openstack的网络模型解析---Rocky版)
478 0
|
安全 Java
什么是枚举?
什么是枚举?
222 2
|
算法
算法】位运算——常见位运算基础操作总结
算法】位运算——常见位运算基础操作总结
468 0
算法】位运算——常见位运算基础操作总结
|
存储 供应链 安全
web3.0知识扫盲
web3.0知识扫盲
542 0
|
网络协议 安全 网络安全
LabVIEW程序的常见加密方式
LabVIEW程序的常见加密方式
712 1
|
网络协议 安全 数据挖掘
F5《企业DNS建设白皮书》中的DNS解析服务器最佳实践
F5《企业DNS建设白皮书》中的DNS解析服务器最佳实践
391 0
F5《企业DNS建设白皮书》中的DNS解析服务器最佳实践