ソートコマンドのKEYDEFはどこにありますか?

ソートコマンドのKEYDEFはどこにありますか?

さまざまな状況で、「du」コマンドの結果をファイルまたはフォルダ名、ファイルサイズ、または最後の変更時刻でソートし、「du」コマンドの後に「|」を追加する必要があります。 sort -k 2 'コマンドをファイルクリップ名でソートする必要があります。これが私がこの質問から学んだものです。 du コマンドを使用してファイル名でソート

sortコマンドマニュアル(RHEL 7.6)には、-k、--key = KEYDEFがキーごとにソートされていると記録されています。 KEYDEF は F[.C][OPTS][,F[.C] です。 [OPTS]]は開始位置と停止位置を示します。ここで、Fはフィールド番号、Cはフィールドの文字位置です。

しかし、まだその意味を理解していません。

F = 2はファイル名を参照しますか?もしそうなら、ファイルサイズまたは最後の修正時間のFは何ですか?では、「KEYDEF」はどこにありますか?

私はこの文書を注意深く読んだ。 https://www.gnu.org/software/coreutils/manual/html_node/sort-inspiration.html しかし、まだ情報が見つかりません。

ベストアンサー1

F はフィールド番号であり、デフォルトではコマンドはsortフィールドをスペースで囲まれたテキストとして定義します。 -bおよび-tオプションはデフォルト値を変更できます。参照する文書には、ロケールなどに基づいてフィールド区切り文字を指定する詳細についての長くて頭の痛い説明が含まれています。

「Fファイルのサイズや最後の修正時間は何ですか?」と尋ねます。sortファイルサイズや変更時間の概念はありません。目標はフィルタリングされた出力なので、コマンドをdu実行してフィールド数を計算します。du

たとえば、duオプションなしで実行すると、1行に2つのフィールド(サイズとファイル/ディレクトリ名)が表示されます。

$ du . 
8       ./ruby
4       ./nextcloud/data/nextcloud
12      ./nextcloud/data/database/nextcloud
4       ./nextcloud/data/database/performance_schema
4       ./nextcloud/data/database/mysql
... etc ...

現在のディレクトリの下のファイルとディレクトリを並べ替える必要がある場合は、デフォルトで最初のフィールドに基づいてソートされるため、du . | sort -nこの問題を解決できます。sort英数字以外の数字でソートするには、-nオプションが必要です。

$ du . | sort -n 
4       ./bitwarden/data/icon_cache
4       ./.cache/obexd
4       ./.cache/pip/wheels/2c/4a/61/5599631c1554768c6290b08c02c72d7317910374ca602ff1e5
4       ./.cache/pip/wheels/33/56/20/ebe49a5c612fffe1c5a632146b16596f9e64676768661e4e46
4       ./.cache/pip/wheels/88/a7/30/e39a54a87bcbe25308fa3ca64e8ddc75d9b3e5afa21ee32d57
4       ./.cache/pip/wheels/fc/a8/66/24d655233c757e178d45dea2de22a04c6d92766abfb741129a
... etc ...

-rを追加すると、大きなファイルを最初に表示できます。

パス名で並べ替え:

du . | sort -k 2

ファイル名(パス名の最後のコンポーネントなど)でソートするクイックソリューションはありません。sortどのサブフィールドがファイル名であるかを把握する必要があり、サブフィールド番号が異なるため、自分でこれを行うことはできないと思います。以下は部分的な回避策です(スラッシュを含むパス名でのみ機能します)。

$ du . | sed 's|\(.*\)/\(.*\)|\1/\2 \2|' | sort -k3
5639116 .
12      ./.cache/pip/http/9/8/7/0 0
12      ./.cache/pip/http/9/c/b/c/0 0
12      ./.cache/pip/http/c/0/4/0/0 0
12      ./.cache/pip/http/f/0/3/0 0
12      ./.cache/pip/http/f/e/d/0 0
136     ./.cache/pip/http/4/8/d/7/0 0
164     ./.cache/pip/http/a/0 0
16      ./.cache/pip/http/0/0/9/7/0 0
16      ./.cache/pip/http/2/8/0 0
... etc ...

duコマンドに変更時間を印刷させるオプションの組み合わせがあるかどうかはわかりません。その場合は、お知らせいただければどの地域かお知らせします。

おすすめ記事