人間が読めるフラグを使用してduコマンドの出力を並べ替え、拡張子(G、M、Kなど)を無視し、数値だけで結果を並べ替えると同時に-hを削除すると、期待どおりに結果にフラグが付けられます。を指定しようとしています。
:~/du_exmp$ du -h ./* | sort -n
1.0M ./file2.txt
2.0G ./file3.txt
52K ./file1.txt
:~/du_exmp$ du ./* | sort -n
104 ./file1.txt
2048 ./file2.txt
4204192 ./file3.txt
問題の源は何ですか?どうやって解決しますか?
答え1
努力するsort -h
。マニュアルから-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)
sort --help
コマンドオプションをよりよく理解するために使用します。
答え2
問題は、あなたが見るものがどのようにsort -n
機能するかです。行の最初の先行値(またはより一般的に-k
フィールドを使用している場合)を表示して並べ替えます。サフィックスを全く理解していないので、KMG
サフィックスに出会うと数字検索を中止します。
最も簡単な方法は、2番目の例で行ったことです。フラグなしdu
で使用すると、完全に自然に動作します。-h
sort
人がより読みやすい出力を維持するには、du -h
別の中間パイプラインステップを使用してデコードされた数値をの出力に追加してソートし、オプションでソートキーを削除してdu
出力を次のように表示する必要があります。ぴったりですからそうでしたdu
。
別のオプションは、プレーンを使用し、du
2番目の例のように出力をソートし、出力を別のステップにパイプして純粋な整数をエンコードすることですdu -h
。
awk
伝統的には、最後の2つのアイデアを使用しますが、やはりperl
動作python
します。