awk分组求和分组统计次数

网友投稿 660 2023-02-11

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

awk分组求和分组统计次数

分组求和

1
awk'{s[$1] += $2}END{ for(i in s){  print i, s[i] } }'file1>file2

以第一列 为变量名  第一列为变量,将相同第一列的第二列数据进行累加打印出和.

1
awk'{s[$1" "$2] += $3}END{ for(i in s){  print i, s[i] } }'file1>file2

以第一列和第二列为变量名, 将相同第一列、第二列的第三列数据进行累加打印出和

1
awk'{s[$1] += $2; a[$1] += $3 }END{ for(i in s){  print i,s[i],a[i] } }' haha.txt

如果第一列相同,则根据第一列来分组,分别打印第二列和第三列的和

匹配

1、匹配交集项

1
awk'NR==FNR{a[$1]=1}NR>FNR&&a[$1]>0{print $0}' file1(字段:QQ) file2(字段:QQ 点券值) >file3

如果file1、file2中,2个文件的第一列值相同,输出第2个文件的所有列

注意:数据量如果达到4Gb以上或者行数达到一亿级别,建议将file2进行split分割,否则就算是32G的内存的机器都会被吃掉;

1
 awk'NR==FNR{a[$1" "$2]=1}NR>FNR&&a[$1" "$2]>0{print $0}' file1 file2>file3

如果file1、file2中,2个文件的第一列第二列值相同,输出第2个文件的所有列

2、匹配非交集项

1
  awk'NR==FNR{a[$1]=1}NR>FNR&&a[$1]<1 {print $0}' file1 file2>file3

针对2个文件的第一列做比较,输出:在file2中去除file1中第一列出现过的行

第二种方法:

1
2
cat file1 file2|sort|uniq-d > jiaoji.txt
cat file2 jiaoji.txt  |sort|uniq-u>file3

取最大值、最小值

1、针对(2列的文件)

1
awk'{max[$1]=max[$1]>$2?max[$1]:$2}END{for(i in max)print i,max[i]}' file

第一列不变,取第二列分组最大值

1
awk'{if(!min[$1])min[$1]=20121231235959;min[$1]=min[$1]<$2?min[$1]:$2}END{for(i in min)print i,min[i]}'file

第一列不变,取第二列分组最小值

2、针对单列的文件

1
2
awk'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'file2
awk'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'file2

求和、求平均值、求标准偏差

求和

1
cat data|awk'{sum+=$1} END {print "Sum = ", sum}'

求平均

1
cat data|awk'{sum+=$1} END {print "Average = ", sum/NR}'

求标准偏差

1
cat$FILE|awk-vave=$ave'{sum+=($1-ave)^2}END{print sqrt(sum/(NR-1))}'

整合行和列

1、列换成行

如果第一列相同,将所有的第二列 第三列 都放到一行里面

1
 awk'{qq[$1]=qq[$1](" "$2" "$3)}END{for(i in qq)print i,qq[i]}'

2、合并文件

2个文件,每个2列,将他们按照第一列相同的数,来合并成一个三列的文件,同时,将每个文件中针对第一列对应第二列中没有的数补0

1
awk'FNR==NR{a[$1]=$2}FNR<NR{a[$1]?a[$1]=a[$1]" "$2:a[$1]=a[$1]" 0 "$2}END{for(i in a)print i,a[i]}'file1 file2>file3

注意点:文件2 一定要比文件1 的行数小

3、2个文件,每个3列,将他们按照第一列、第二列相同的数,来合并成一个4列的文件,同时,将每个文件中针对第一列、第二列对应第3列中没有的数补0

1
awk'FNR==NR{a[$1" "$2]=$3}FNR<NR{a[$1" "$2]?a[$1" "$2]=a[$1" "$2]" "$3:a[$1" "$2]=a[$1" "$2]" 0 "$3}END{for(i in a)print i,a[i]}' file

4、将列换成行,遇到空行,另起下一行

1
awk'begin {RS=""} {print$1,$2,$3} file1

5、某列数字范围筛选

1
2
3
4
cat  canshu|whilereadab
do
awk '{ if ($2>'"$a"' && $2<='"$b"' ) print $1}'result.txt >"$a"_"$b"_result.log
done

集合类

1、集合交

1
cat fileA fileB|sort|uniqd>result.log

2、集合差

1
2
cat fileA fileB    |sort|uniq-d  >jiaoji.txt
cat fileA jiaoji.txt |sort|uniq-u  >result.log

3、集合全集去重

1
cat fileA fileB|sort -u>result.log

4、集合全集不去重

1
cat fileA fileB|sort    >result.log
上一篇:运维事件分为哪几级和几级(运维事件分类分为)
下一篇:包含系统性能测试指标有哪些的词条
相关文章

 发表评论

评论列表