表格的交集合集等的命令處理

工作中經常遇到運營同學需要統計數據,需要從各種表裏查詢出來各種數據做組織和合並處理,瞭解了這些命令處理表格就非常簡單高效。而且處理的速度比寫各種複雜的SQL要高效的多。當然了,只能處理CSV數據。

幾個基礎命令

sort 排序命令 uniq 唯一命令

sort 參數 說明
-n 依照數值的大小排序
-u unique,輸出的結果是去重
-r 默認是升序,以降序來排序
-t 指定排序時的分隔字符
-k 使用某一列進行排序,1表示第一列
-o 將排序後的結果存入指定的文件
uniq 參數 說明
-d 重複的行
-u 只出現一次行
-c 按照出現的次數
cat 1.csv
1,a
8,h
9,i
10,j
20,j

按照第二列降序排列,並且第二列保持唯一

sort -ru -t, -k2 1.csv
20,j
9,i
8,h
1,a

按照第二列輸出出現的字數

sort -r -t, -k2 1.csv | awk -F',' '{print $2}' | uniq -c
   2 j
   1 i
   1 h
   1 a
重複出現的數據
sort -r -t, -k2 1.csv | awk -F',' '{print $2}' | uniq -dc
j

AWK學習前面的內容

join命令多個文件關聯操作

join 參數 說明
-1n 連接文件1指定的列號
-2n 連接文件2指定的列號
-an 顯示文件n的行之外,也顯示沒有相同列的行
-vn 與-a相同,只顯示沒有相同列的行
-t 指定排序時的分隔字符
-o 將排序後的結果存入指定的文件
cat 1.csv
1,a
8,h
9,i
10,j
cat 2.csv
d,4
e,5
f,6
g,7
h,8
i,9

1.csv的第一列 2.csv的第二列的交集

join -t, -11 -22 1.csv 2.csv
8,h,h
9,i,i

1.csv的第一列 2.csv的第二列的差集

join -t, -11 -22 -v1 1.csv 2.csv
1,a
10,j

1.csv的第一列 2.csv的第二列 2.csv的差集

join -t, -11 -22 -v2 1.csv 2.csv
d,4
e,5
f,6
g,7

按照列輸出,輸出1.csv的第二列 2.csv的第一列和第二列

join -t, -11 -22 -a1 -o 1.1 2.1 2.2 11.csv 2.csv
11,,
1,,
8,h,8
9,i,9

注意

注意的問題是,使用join命令的時候需要先排序即
sort xx.csv > xxy.csv,多列的話需要使用 sort -u -t分隔符 -k關聯的內一列 > xxx.csv 否則某些情況下會出現未排序的提示
join: 1.csv:4: is not sorted: 11,j

處理過問題

以前一個朋友找過來處理過一個簡單數據,告訴我有兩個文件,一個my.csv一個all.csv,all.csv是這個月的項目列表,my.csv我做過的項目,現在幫我找出我做過的項目有哪些在這個項目裏面?CSV裏面的後兩列是code列和version列唯一確定一個項目。

cat my.csv
項目一,正在做,tony,HM,10
項目二,已完成,Monica,HM,11
項目三,準備,jack,BM,20
項目四,準備,Susan,DM,30
cat all.csv
1,tony,HM,10
2,Monica,HM,11
3,jack,BM,20
4,Susan,DM,30
5,Monica,XM,1
6,Monica,AM,2
7,Monica,BM,3
8,Monica,DM,30

根據後兩列生成唯一列 my_u.csv all_u.csv

cat my.csv | awk -F"," '{print $0","$4"_"$5}' > my_u.csv
cat all.csv | awk -F"," '{print $0","$3"_"$4}' > all_u.csv

根據爲唯一列排序取唯一數據my_r.csv all_r.csv

sort -u -t, -k6 my_u.csv -o my_r.csv
sort -u -t, -k5 all_u.csv -o all_r.csv

獲取all_r.csv my_r.csv關於最後一列的交集就是需要的結果

join -t, -16 -25 my_r.csv all_r.csv
BM_20,項目三,準備,jack,BM,20,3,jack,BM,20
DM_30,項目四,準備,Susan,DM,30,4,Susan,DM,30
HM_10,項目一,正在做,tony,HM,10,1,tony,HM,10
HM_11,項目二,已完成,Monica,HM,11,2,Monica,HM,11

可以看到有四個項目在這個月的項目列表裏面,表示已經做完了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章