[转帖]awk(三) 列运算

awk,运算 · 浏览次数 : 0

小编点评

```awk # 求每一行中指定列的最大值 {m=0;for(x=5;x<=NF;x++)if($x>m) {m=$x};print m} # 求第5列到最后一列中每行的最大值 {m=0;for(x=4;x<=NF;x++)if($x>m) {m=$x};if(m >= 1)print} # 求第4列到最后一列中最大值 gt>=1{min=$4;for(i=4;i<=NF;i++)if($i<min)min=$i;print min} # 求第4列到最后一列的最小值 {min=10000;if($5<min)min=$5} # 求第4列到最后一列的最小值 print \"Min =\",min # 求第五列的最大值 {max=0;if($5>max)max=$5} # 求第五列的最小值 print \"Min =\",max # 对第二列的所有数值求和 {sum+=$2}END{print \"Avg =\",sum/NR} # 对第二列求均值 for(i=1;i<=5;i++){sum+=$i}{print sum/5} # 对每一行的前5列求均值 print sum/5

正文

https://www.jianshu.com/p/b46f783832e3

 

1. 求每一行中指定列的最大/小值

awk '{m=0;for(x=5;x<=NF;x++)if($x>m) {m=$x};print m}' input.file

# 求第5列到最后一列中每行的最大值

awk '{m=0;for(x=4;x<=NF;x++)if($x>m) {m=$x};if(m >= 1)print}' input.file

# 求第4列到最后一列中最大值>=1的行,并输出

awk '{min=$4;for(i=4;i<=NF;i++)if($i<min)min=$i;print min}' input.file

# 求第4列到最后一列的最小值,并输出

2. 对列进行求值

awk 'BEGIN{max=0}{if($5>max)max=$5}END{print "Max =",max}' input.file

# 求第五列的最大值

awk 'BEGIN{min=10000}{if($5<min)min=$5}END{print "Min =",min}' input.file

# 求第五列的最小值

# 此处最小值必须小于10000,否则需要更改初始赋值

awk '{sum+=$2}END{print "Sum =",sum}' input.file

# 对第二列的所有数值求和

awk '{sum+=$2}END{print "Avg =",sum/NR}' input.file

# 对第二列求均值

awk '{for(i=1;i<=5;i++){sum+=$i}{print sum/5}}'

# 对每一行的前5列求均值

与[转帖]awk(三) 列运算相似的内容:

[转帖]awk(三) 列运算

https://www.jianshu.com/p/b46f783832e3 1. 求每一行中指定列的最大/小值 awk '{m=0;for(x=5;x<=NF;x++)if($x>m) {m=$x};print m}' input.file # 求第5列到最后一列中每行的最大值 awk '{m=0

[转帖]shell 把以空格分隔的变量 分割后的每个字段赋值给变量

比如我有一个变量 “123 456 789”,要求以空格为分隔符把这个变量分隔,并把分隔后的字段分别赋值给变量,即a=123;b=456;c=789 共有3中方法: 法一:先定义一个数组,然后把分隔出来的字段赋值给数组中的每一个元素 法二:通过eval+赋值的方式 法三:通过多次awk把每个字段赋值

[转帖]awk提取某一行某一列的数据

https://www.jianshu.com/p/dbcb7fe2da56 1、提取文件中第1列数据 awk '{print $1}' filename > out.txt 2、提取前2列的文件 awk `{print $1,$2}' filename > out.txt 3、打印完第一列,然后打

[转帖]awk 中 FS的用法

https://www.cnblogs.com/rohens-hbg/p/5510890.html 在openwrt文件 ar71xx.sh中 查询设备类型时,有这么一句, machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /

[转帖]awk 文本处理

https://juejin.cn/post/6844903860629143559 awk 文本处理 awk 是一种样式扫描和处理语言,使用 Linux 的 awk 命令可以高效快捷地进行文本处理。awk 扫描文本的每一行并执行指定的命令。 awk 诞生于 1977 年,借鉴了 C 语言等编程语言

[转帖]awk——getline

http://t.zoukankan.com/panscience-p-4685698.html A.getline从整体上来说,应这么理解它的用法: 当其左右无重定向符 | 或 < 时,getline作用于当前文件,读入当前文件的第一行给其后跟的变量var 或$0(无变量);应该注意到,由于awk

[转帖]awk(五) 字符串函数(substr截取)

https://www.jianshu.com/p/bee599fabe85 1. substr(s,p) 返回字符串s中从p开始到最后部分 每一行从第101个字符开始截取到末尾awk '{print substr($0, 101)}' input.file 2. substr(s,p,n) 返回字

[转帖]awk(四) 字符串函数(gsub替换)

https://www.jianshu.com/p/d465f4dccbbe 1. gsub(r,s) 在整个$0中用s替代r 删除文件中所有逗号awk 'gsub(",", ""){print}' input.file# 注意gsub内部用双引号"" 2. gsub(r,s,t) 在整个t中用s替

[转帖]awk(二) 输出/删除指定列

https://www.jianshu.com/p/d26356ffccd7 1. 输出每行的前5列,并按行输出 awk '{for(i=1;i<6;i++)printf("%s ",$i);printf("\n")}' input.file 2. 输出多列,并更改分隔符为TAB awk '{for

[转帖]awk(一) 基本操作符

https://www.jianshu.com/p/e3fa91a8d9f2 $0 表示整个当前行 $1 每行第一个字段 NF 字段数量变量 NR 每行的记录号,多文件记录递增 FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始 \t 制表符 \n 换行符 FS BEGIN时定义分隔符 R