一些常用的數據統計shell


1. 求文件交集、並集、差集

1.1 使用命令comm

comm命令按行比較兩個已對記錄排序的文件。要注意兩個文件必須是排序和唯一(sorted and unique)的,默認輸出為三列,第一列為是A-B,第二列B-A,第三列為A交B。

選項:-1 排除僅在文件1 中出現的記錄

   -2 排除僅在文件2 中出現的記錄

   -3 排除同時在文件1 和 2中出現的記錄

1.2 使用sort 和 uniq命令

前提:文件1和文件2都是已去重。

求交集:cat file1 file2 | sort | uniq -d

求並集不去重:cat file1 file2 | sort

求並集去重:cat file1 file2 | sort -u

求差集:cat file1 file2 | sort | uniq -d > temp

           cat file1 temp | sort | uniq -u

2. 隨機取若干條記錄

awk中使用rand()函數

cat file | awk '{print rand() "|" $1}' | sort -k1 -t"|" | awk -F'|' '{print$2}' |head -5

3. 分組求和

3.1 將第一列相同的記錄的第二列數值相加並打印:awk -F'|' '{a[$1]+=$2}END{for(i in a){print i"|"a[i]}}' file1 file2

3.2 將第一列和第二列都相同的記錄的第三列相加並將結果打印出來:awk -F'|' '{a[$1"|"$2]+=$3}END{for(i in a){print i"|"a[i]}}' file

3.3 根據第一列,分別將第二列和第三列的數值相加並打印:awk -F'|' '{a[$1]+=$2;b[$1]+=$3}END{for(i in a){print i"|"a[i]"|"b[i]}}' file

4. 匹配

4.1 匹配交集項

若file中記錄的第一列在list中記錄的第一列出現過,則輸出該記錄在file中的整列:awk -F'|' 'NR==FNR{a[$1]=1}NR>FNR&&a[$1]==1{print$0}' list file

4.2 匹配非交集項

若file中記錄的第一列未在list中的第一列出現過,則輸出該記錄在file中的整行:awk -F'|' 'NR==FNR{a[$1]=1}NR>FNR&&a[$1]!=1{print$0}' list file

5. 取最大值最小值

5.1 單列記錄

求單列記錄中最大值的列:awk -F'|' 'BEGIN{max=0}{if($1>max){max=$1}}END{print max}' number

求單列記錄中最小值的列:awk -F'|' 'NR==1{min=$1}{if($1<min){min=$1}}END{print min}' number

5.2 多列記錄

以第一列為key,對應多個value,則取key對應的最大值和最小值:

最大值:awk -F'|' '{max[$1]=max[$1]>$2?max[$1]:$2}END{for(i in max){print i"|"max[i]}}' max_min

最小值:awk -F'|' '{if(!min[$1]){min[$1]=$2}else{min[$1]=min[$1]<$2?min[$1]:$2}}END{for(i in min){print i"|"min[i]}}' max_min


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM