Bash

查找唯一名稱的頻率

  • January 4, 2021

我有(.csv.gz)包含使用者名的壓縮 csv 文件的子文件夾,我正在嘗試查找使用者名的頻率。

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

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

但是,當我在子文件夾中有很多大文件時,它會很慢。為此目的是否有更有效的 bash 腳本?

根據唯一使用者的數量,您可以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

引用自:https://unix.stackexchange.com/questions/627488