web-dev-qa-db-ja.com

人間が読めるサイズで数値的にソートするにはどうすればよいですか?

たとえば、フォルダに必要なスペースを示すコマンドがあります

du folder | sort -n

それはうまくいきますが、人間が読める形式にしたいです

du -h folder

ただし、それを行うと、数値としてソートできません。

du folderdu -h folderを結合して、du folderとしてソートされ、du -h folderの最初の列がある出力を表示する方法

追伸これは単なる例です。このテクニックは私にとって非常に役立つかもしれません(可能な場合)

19
UAdapter

より一般的なアプローチを次に示します。 2つの異なるファイルでdu folderおよびdu -h folderの出力を取得します。

du folder > file1
du -h folder > file2

重要な部分はこれです:file1file2を適切な区切り文字で行ごとに連結します。

paste -d '#' file1 file2 > file3

#file1およびfile2に表示されないと仮定します)

file3をソートします。これは、file1の内容に基づいてソートされ、file2の内容でタイを解除することに注意してください。 cutを使用して関連する結果を抽出します。

sort -n -k1,7 file3 | cut -d '#' -f 2

他のオプションについては、man sortもご覧ください。


これをエイリアスとして保存して、後で再利用することもできます。これを行うには、~/.bashrcの最後に次を追加します。

sorted-du () {
    paste -d '#' <( du "$1" ) <( du -h "$1" ) | sort -n -k1,7 | cut -d '#' -f 2
}

次に、新しいターミナルセッションを開き、新しいエイリアスを実行します。

sorted-du /home
11
Prateek

次のようなものを試してください:

du -h folder | sort -h

代替案:-n数値ソート用

注:sortの-hオプションは、Ubuntuの新しいバージョンにのみ存在します。

33
Allu2

この回答は、10.04.4LTS以下のUbuntuで有効です。

残念ながら、K M Gを分類する正確な答えは難しく、複雑です。

あなたはこれを使用して人間が読めるものをソートするものでduコマンド全体をエイリアス化できます

alias duf='du -sk * | sort -n | Perl -ne '\''($s,$f)=split(m{\t});for (qw(K M G)) {if($s<1024) {printf("%.1f",$s);print "$_\t$f"; last};$s=$s/1024}'\'

ここで見つけた

http://www.earthinfo.org/linux-disk-usage-sorted-by-size-and-human-readable/

知りたいフォルダにcdだけでduf

このdufエイリアスを/home/user/.profileの最後に追加して、dufコマンドを半永久的にすることができます。

結果:

user@hostname:~$ duf
0.0K  Documenten
0.0K  Muziek
0.0K  Openbaar
0.0K  Sjablonen
0.0K  Video's
4.0K  backup_db.sql.g
4.0K  examples.desktop
12.0K xml printer ticket
52.0K hardinfo_report.html
152.0K    librxtxSerial.so
2.7M  jpos
4.4M  nxclient_3.5.0-7_AMD64.deb
6.4M  nxnode_3.5.0-4_AMD64.deb
6.8M  Downloads
7.4M  nxserver_3.5.0-5_AMD64.deb
12.4M NetBeansProjects
18.1M mysqlworkbench.deb
28.3M Afbeeldingen
45.8M ergens-20110928-18.sql.gz
60.5M 2012-06-02ergens_archive.tar.gz
65.5M 2012-08-26ergens_archive.tar.gz
65.6M 2012-08-28ergens_archive.tar.gz
65.6M 2012-08-29ergens_archive.tar.gz
65.7M 2012-08-30ergens_archive.tar.gz
113.0M    Bureaublad
306.2M    ergens-20110928-18.sql

du -sch /var/* | sort -nが機能しない理由は次のとおりです。MKKMMKKMMKのソートが表示されます

user@hostname:~$ du -sch /var/* |sort -n

0 /var/crash
0 /var/local
0 /var/lock
0 /var/opt
8,0M  /var/backups
12K   /var/games
16K   /var/tmp
17M   /var/log
68M   /var/cache
104K  /var/spool
144K  /var/run
351M  /var/lib
443M  totaal
704K  /var/mail
4
Kat Amsterdam

コマンドGNU sortには次のオプションがあります。

-h--human-numeric-sortは、人間が判読可能な数値(2K 1Gなど)を比較します。

BSD/OSXでこのオプションを使用するには、sortから(coreutilsを介して)brewをインストールし、PATHにbinフォルダーをrcに追加します。ファイル。

したがって、コマンドは次のようになります。

du -ah . | sort -rh | head -20
2
kenorb

で端末を開きます Ctrl+Alt+t そしてタイプ:

  du -sk * | sort -rn 
0
rɑːdʒɑ

これは、空白またはアポストロフィでファイル名を処理し、xargs -dまたはsort -hをサポートしないシステムで動作します:

du -s * | sort -n | cut -f2 | tr '\n' '\0' | xargs -0 -I {} du -sh "{}"

その結果:

368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm
0
Mark Crossfield

Ubuntuの最近のバージョンでは、du -h directory | sort -hを使用します。

制御不能なファイルを見つけるために、この形式を常に使用しています。

0
belacqua

バージョンに関係なくすべてのシステムで動作していることがわかりました(sort -hは動作しません)

du -h $(du * | sort -n | awk '{print $2}')

awk '{print $2}'は基本的にファイル名を出力します。

0
yahiaelgamal