首頁>Linux>source

我有壓縮的csv (.csv.gz)的子檔案夹 包含使用者名的檔案,我正在尝試查詢使用者名的频率。

以下bash管道為我提供了頂級使用者。

for subfolder in folder; do gunzip -rc $subfolder | cut -d, -f1 | sort | uniq -c | sort -nr | head; done

但是,当我在子檔案夹中有很多大檔案時,速度非常慢.為此,是否有更有效的bash指令碼?

最新回復
  • 5月前
    1 #

    根据唯一使用者的數量,您可以让 awk 进行繁重的工作(在讀取重複條目時對其进行計數,而不进行排序),然後對結果进行排序.它應该走得更快(但是您仍然必须解壓縮所有內容,這需要一些時間):

    $ for subfolder in folder; do gunzip -rc $subfolder | awk -F, '{l[$1]++} END {for (i in l) {print l[i],i}}' | sort -rn | head;done
    

    作為參考,您不能使其執行速度超過:

    $ for subfolder in folder; do gunzip -rc $subfolder > /dev/null;done
    

  • awk:我可以从该資料中提取第n个"大塊"吗?
  • bash:根据列的一部分拆分CSV檔案