私がしたい
awk -F "," '{print $1 }' inputfile1.txt | sort -u > distinctOutput.txt
パフォーマンス面では大丈夫ですか?それとも、awkが完全な出力ダンプを完了するまでsortを待つ方が良いと思うので、一時ファイルをリダイレクト/使用する必要がありますか?それとも内部的に処理されますか?
(AIX 6.1)
答え1
sort
一時ファイルは自動的に使用されるようです。記事のさまざまな場所で一時的な従業員が言及されています。man
そしてinfo
以下を含むページsort
:
--compress-program=PROG
compress temporaries with PROG; decompress them with PROG -d
-T, --temporary-directory=DIR
use DIR for temporaries, not $TMPDIR or /tmp; multiple options
specify multiple directories
環境変数TMPDIRが設定されている場合、sortはその値を/ tmpの代わりに一時ファイルのディレクトリとして使用します。 --temporary-directory(-T) オプションは環境変数をオーバーライドします。
テストするために、以下を実行しました。
base64 < /dev/urandom | sort
メモリ使用量が速く安定しますbase64
(sort
)top -bn1 | grep 'base64|sort'
。
21877 root 20 0 11.1m 0.6m 0.5m R 63.9 0.0 7:23.46 base64
21878 root 20 0 21.4m 8.2m 0.8m R 31.9 0.4 4:44.15 sort
/tmp
通話中に何百もの一時ファイルを表示できますsortXXXXXX
。
$ ls /tmp/sort* | head
/tmp/sort03IIcQ
/tmp/sort052vXK
/tmp/sort07ZCcO
/tmp/sort09yrTN
/tmp/sort0anX08
/tmp/sort0BruPR
/tmp/sort0EgCYY
/tmp/sort0GsbQs
/tmp/sort0hCMDD
/tmp/sort0hdSMT
$ ls /tmp | grep -c sort
1990
したがって、一時ファイルについて心配する必要はないと言いたいと思いますsort
。最善の方法は、一時ファイルの場所が高速ファイルシステム(SSDなどtmpfs
)にあることを確認することです。
免責事項:私はGNUソートのみを検討しました。
上記の分析はGNUソートにのみ適用されますが、AIXsort
リンクされたマニュアルによれば、一時ファイルも使用されるか、少なくとも一時ファイルのディレクトリが使用されます。これをテストできるAIXシステムはありません。
POSIX一時ファイルへの言及がないため、これは提供されません。
答え2
大容量ファイル(カンマ区切り、csv、2173762行、186MB)で動作をテストしました。
awk
パイプを介してsort
49611システムコールを提供し、次の操作を行います。
real 0m5.134s
user 0m5.048s
sys 0m0.080s
awk
一時ファイルとして保存し、sort
2番目のステップのファイルで49719システムコールが発生しました。
real 0m6.006s
user 0m5.836s
sys 0m0.152s
別の方法でもsort
(sort -k1 -u
)最初にパイピングすると、awk
より悪い結果が出ます(47533システムコール)。
real 0m17.937s
user 0m17.565s
sys 0m0.348s
結論として:最もリソースに優しい方法を見つけたようです。または、より速い方法が見つかりません。
- 奇妙な:
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
- タイプ:
sort (GNU coreutils) 8.13