数据需求统计常用shell命令---AWK分组求和,分组统计次数

简介:

1、将时间转换为时间戳

select unix_timestamp('2009-10-26 10-06-07')

如果参数为空,则处理为当前时间

 

2、将时间戳转换为时间

select from_unixtime(1256540102)

有些应用生成的时间戳是比这个多出三位,是毫秒表示,如果要转换,需要先将最后三位去掉(标准的10位数字,如果是13位的话可以以除以1000的方式),否则返回NULL

 

 

 

1.将IP地址转化为数字

select inet_aton('210.30.0.103');

 

2.将数字转化为IP地址

select inet_ntoa(3525181543);

 

 

 

随机取用户

cat  file1 | awk '{ print rand(),$1 }' |sort -k1 |awk '{ print $2 }' |head -4000

 

分组求和

 

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

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

数据需求统计常用shell命令

 

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

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

数据需求统计常用shell命令

 

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

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

数据需求统计常用shell命令

 

匹配

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的内存的机器都会被吃掉;

数据需求统计常用shell命令

 

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

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

数据需求统计常用shell命令

 

2、匹配非交集项

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

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

数据需求统计常用shell命令

第二种方法:

cat file1 file2|sort |uniq -d          > jiaoji.txt

cat file2 jiaoji.txt  |sort |uniq -u > file3

 

取最大值、最小值

1、针对(2列的文件)

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

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

 

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、针对单列的文件

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

 

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

求和

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

 

求平均

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

 

求标准偏差

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

 

整合行和列

1、列换成行

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

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

数据需求统计常用shell命令

 

2、合并文件

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

 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 的行数小

数据需求统计常用shell命令

 

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

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、将列换成行,遇到空行,另起下一行

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

 

5、某列数字范围筛选

cat   canshu |while read a b

do

awk '{ if ($2>'"$a"' && $2<='"$b"' ) print $1}' result.txt  > "$a"_"$b"_result.log

done

注意点:awk使用函数时,使用'"$a"'(先单引号,后双引号)

 

集合类

数据需求统计常用shell命令

1、集合交

cat fileA fileB |sort |uniq –d > result.log

2、集合差

cat fileA fileB     |sort |uniq -d   > jiaoji.txt

cat fileA jiaoji.txt  |sort |uniq -u   > result.log

3、集合全集去重

cat fileA fileB |sort  -u > result.log

3、集合全集不去重

cat fileA fileB |sort     > result.log











本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1659824,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
24天前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
52 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
27天前
|
Shell 知识图谱
Shell printf 命令
10月更文挑战第3天
16 1
|
1月前
|
Unix Shell Linux
常见的shell命令
shell常用命令
31 11
|
2月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
2月前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
31 5
|
27天前
|
Shell PHP
Shell echo命令
10月更文挑战第3天
15 0
|
1月前
|
JSON Java Shell
Dockerfile中RUN、CMD、ENTRYPOINT、SHELL命令的区别
理解这些指令的差异和应用场景,有助于构建高效、灵活且易于管理的Docker镜像。在实际应用中,根据需要选择合适的指令,可以有效地控制镜像构建和容器运行的行为。
96 0
|
1月前
|
SQL Shell 数据库
在TDengine容器中创建初始化数据库的Shell命令实例
以上就是在Docker容器环境中部署并初始化TDengine数据库的全过程,希望对你有所帮助。
37 0
|
3月前
|
分布式计算 资源调度 Hadoop
Hadoop入门基础(五):Hadoop 常用 Shell 命令一网打尽,提升你的大数据技能!
Hadoop入门基础(五):Hadoop 常用 Shell 命令一网打尽,提升你的大数据技能!