我有一個非常大的文件(許多千兆字節),它看起來像如何結合升序和降序排序?
input.txt中
a|textA|2
c|textB|4
b|textC|5
e|textD|1
d|textE|4
b|textF|5
在第一步,我想數字線由第三列按降序排序,並且如果行具有第三列的相同值,則它們必須按照第一列的文本排序 - 按升序排列。如果行的第1列和第3列的值相同,則必須按第2列按升序排序。第二列保證是獨一無二的。
所以,我希望得到的結果是:
desiredOutput.txt
b|textC|5
b|textF|5
c|textB|4
d|textE|4
a|textA|2
e|textD|1
我可以採取的第一步:
sort -t\| -bfrnk3 path/to/input.txt > path/to/output.txt
但是,什麼是下一個步驟是什麼?也許結果可能在一次傳遞中實現?
編輯
我測試sort -t '|' -k 3,3nr -k 1,1 -k 2,2 input.txt > output.txt
。它給出了以下「output.txt」:
b|textF|5
b|textC|5
c|textB|4
d|textE|4
a|textA|2
e|textD|1
這不是我想要的。
我不明白。我採取了兩個步驟:1.'sort -t'|' -k 3,3nr -k 1,1 -k 2,2 path/to/input.txt> path/to/pass1output.txt' 2. sort -t'|' -k 3,3nr path/to/pass1output.txt> path/to/output.txt'輸出與我想要的不同。 –
它提供了與我想要的不同的輸出。你檢查了「** desiredOutput.txt **」嗎?將其與您的答案的結果文件進行比較。 –
第一步之後(見上面的註釋) - 'b | textF | 5,b | textC | 5,c | textB | 4,d | textE | 4,a | textA | 2,e | textD | 1'。之後,第二步不會給出所需的輸出。你爲什麼重複'sort -t'|' -k 3,3nr'? –