Linux
對 csv 文件進行排序時出現意外結果
我有以下 CSV 文件,如下所示,有 4 列,我正在從 bash 終端輸入文件名。
Sile,Barhams,Female,sba3@exe.com Shae,Scotti,Male,mi5@exe.com Shae,Bonham,Female,sm9@ex.org Shay,Ert,Female,sep@emple.gov Simeon,Dearle,Male,sz@e.net
期望的輸出是:
Shae,Male Shae,Female Shay,Female Sile,Female Simeon,Male
現在我嘗試了以下程式碼片段並得到瞭如圖所示的結果:
cat $file | cut -d, -f1,3 | sort -k 1,1 -s Shae,Female Shae,Male Shay,Female Sile,Female Simeon,Male cat $file | cut -d, -f1,3 | sort -k 1,1 -s -n Sile,Female Shae,Male Shae,Female Shay,Female Simeon,Male
有人可以解釋我的兩個片段以及如何獲得想要的片段嗎?根據我的第一個程式碼,我根據第一列排序,如果出現平局,我已經指定了穩定排序以獲得所需的輸出,但是 IDK 是什麼問題和在第二個程式碼中,我想知道“Sile”是如何出現在頂部的。
cat $file | cut -d, -f1,3 | sort -k 1,1 -s Shae,Female Shae,Male Shay,Female Sile,Female Simeon,Male
您會得到它,因為預設情況下
-k
引用的欄位是空白分隔Shae,Female
的欄位,並且排序在Shae,Male
.您需要
-t
選擇告訴它使用逗號作為分隔符:
-t
,--field-separator=SEP
使用 SEP 而不是非空白到空白的過渡
$ cat "$file" | cut -d, -f1,3 | sort -t, -k 1,1 -s Shae,Male Shae,Female Shay,Female Sile,Female Simeon,Male
cat $file | cut -d, -f1,3 | sort -k 1,1 -s -n Sile,Female Shae,Male Shae,Female Shay,Female Simeon,Male
在這裡,使用
-n
,排序是基於數據的數值。但是這裡沒有數字字元串:所有非數字字元串都將被視為零。因此,實際上沒有主要的排序規則。使用-s
,訂單將保持原樣。沒有-s
,sort
將退回到文本排序以獲得一些結果。