一意の名前の頻度を見つける

一意の名前の頻度を見つける

ユーザー名を含む圧縮CSVファイル(.csv.gz)のサブフォルダがあり、ユーザー名の頻度を見つけようとします。

次のbashパイプラインは親ユーザーを提供します。

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

しかし、サブフォルダに大容量のファイルが多いと、非常に遅くなります。この目的でより効率的なbashスクリプトがありますか?

ベストアンサー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

おすすめ記事