數據需求統計經常使用shell命令---AWK分組求和,分組統計次數


一、將時間轉換爲時間戳php

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

若是參數爲空,則處理爲當前時間ide

 

二、將時間戳轉換爲時間函數

select from_unixtime(1256540102)spa

有些應用生成的時間戳是比這個多出三位,是毫秒錶示,若是要轉換,須要先將最後三位去掉(標準的10位數字,若是是13位的話能夠以除以1000的方式),不然返回NULL3d

 

 

 

1.將IP地址轉化爲數字unix

select inet_aton('210.30.0.103');blog

 

2.將數字轉化爲IP地址內存

select inet_ntoa(3525181543);get

 

 

 

隨機取用戶

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

  若是file一、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

  若是file一、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))}'

 

整合行和列

一、列換成行

  若是第一列相同,將全部的第二列 第三列 都放到一行裏面

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

數據需求統計經常使用shell命令

 

二、合併文件

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

相關文章
相關標籤/搜索