工作中經常遇到運營同學需要統計數據,需要從各種表裏查詢出來各種數據做組織和合並處理,瞭解了這些命令處理表格就非常簡單高效。而且處理的速度比寫各種複雜的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
可以看到有四個項目在這個月的項目列表裏面,表示已經做完了。