含まれる行数に基づいてソートされたファイルのリスト

含まれる行数に基づいてソートされたファイルのリスト

ファイルの行数をどのように一覧表示します/group/book/four/word(含まれている行数に基づいて並べ替え)?

このls -lコマンドはファイルをリストしますが、ソートしません。

答え1

次のコマンドを使用する必要があります。

find /group/book/four/word/ -type f -exec wc -l {} + | sort -rn
  • find:目的のパスからファイルを検索します。再帰的にしたくない実装でそれをサポートする場合は、オプションの前に追加する必要がfindあります。-maxdepth 1-exec
  • execwc -l:各ファイルに対して実行するコマンドを通知します。
  • sort -rn:結果を数値に従って逆順に並べ替えます。大きいものから低いものまで。

(ファイル名に改行文字が含まれていないと仮定)。

答え2

非再帰的

再帰が必要ない場合は、おそらく最も単純なバージョンです。

wc -l /group/book/four/word/*|sort -n

wc-l各(隠し)*ファイルの行数を数え、(オプション)結果を数値でソートし/group/book/four/word/ますsort(パイプを介して|)(オプション-n)。

再帰

grep -rlc前述の回答について、誰かがこれを抑制するためにコメントしました。grep特に再帰が必要な場合は、実際には良い選択です。

grep -rc '^' /group/book/four/word/|tr ':' ' '|sort -n -k2

()(つまり行の先頭)に一致するディレクトリの-c(オプション)行は繰り返し評価されます。次に、コロンを空白に置き換える必要があります(例:-rgrep'^'/group/book/four/word/trsort-n-k2

修正する:可能な制限と実際にそれらを削除する方法についてはStephaneを参照してくださいtr

答え3

そしてzsh

lines() REPLY=$(wc -l < $REPLY)
print -rC1 /group/book/four/word/*(.no+lines)

私たちは新しいものを定義します種類この関数はlinesファイルの行数を返します。数値ソートのためにglob結果がソートされる方法を定義するo+linesglob修飾子を使用します。n.通常のファイルに対してのみスキャンも追加しました)。

.これは、隠しファイル(で始まるファイル)を無視することを除いて、ファイル名にどの文字を含めることができるかを想定していません。D必要に応じてglob修飾子を追加してください。

関数を定義することは、同様の操作を頻繁に実行するのに役立ちますlinesが、1回限りの場合は、すべての操作を一度に実行することもできます。

print -rC1 /group/book/four/word/*(.noe['REPLY=$(wc -l < $REPLY)'])

別のシェルで次を実行します。

zsh -c '
  print -rC1 /group/book/four/word/*(.noe['\''REPLY=$(wc -l < $REPLY)'\''])'

または、本当にこれらのシェルを使用する必要がある場合はksh93/arrayに保存してください。bash

typeset -a array
eval "
  array=(
    $(
      zsh -c '
        () {
          print -r -- "${(qq)@}"
        } /group/book/four/word/*(N.noe['\''REPLY=$(wc -l < $REPLY)'\''])'
    )
  )
"

qq(評価を安全にするには、ここでパラメータ拡張フラグと一緒に適切な一重引用符を使用してくださいeval。)

答え4

インストールしたい場合fdRustで書かれた非常に高速なファイルを見つける(インストールする必要があります。とにかく素晴らしいです)

fd --type=file . | xargs wc -l | sort -n

fdデフォルトでは、ファイルがリストされ、xargsにファイルリストが渡されます(単語数をwc意味しますが、-lを渡すと行数が計算されます)。次に、最後に最小のものから最大のものまで使用されますsort -n

関連情報