linux 大檔案 排序去重
阿新 • • 發佈:2022-04-07
有的日誌檔案 動不動就幾十個G
比記憶體都大 ,linux 用 sort 命令 害怕記憶體不足了
這時候 可以 用 -T
選項 ,他會指定一個臨時檔案 ,這樣先把結果 放到臨時檔案裡不會佔記憶體 會跑滿cpu但是記憶體佔用只有0.幾
還有一種方法 是 先用 split
分割命令 ,分割成多個檔案 ,對他們進行排序 ,然後 在 -m
引數 將幾個排序好的檔案進行合併。
然後 對結果 執行 uniq 即可
命令如下
先 split event1.csv -l 100000
按行數分割檔案
會看到 x** 起始的 分割檔案結果
然後 ls x* | xargs -I {} sh -c "sort '{}' -T /home/ifnk/tmp > '{}.sort'"
遍歷這些分割檔案 ,分別對他們進行排序 ,輸出結果 分別為 x**.sort 結果 檔案
xargs 裡面 {} 這個即為item ,但是他不好做 字串拼接 ,所以我這裡用 sh -c 命令 搭配 單引號 完成 檔名拼接
重點在這的-T設定tmp引數,sort是會寫快取檔案的工具,不會
一次性讀取檔案到記憶體,所以記憶體大小無所謂,但是預設會寫系統區,可能造成系統區空間不夠
所以找個比較大的地方放
接著 執行 "sort -m ls *.sort
> result" 將 結果 合併 成一個
sort -m
-m 將幾個排序好的檔案進行合併。
然後 執行 uniq result > dudu
dudu
即為最終結果