少なくとも4桁の数字のファイルを探す

少なくとも4桁の数字のファイルを探す

このようなファイルが多すぎます。[a-zA-Z]+\d\.\d{2}\_\d.\d{4}.end少なくとも4桁の古いファイルを見つけたいです.end。 (衝突時にすべてのファイルが欲しい)

Bashを使ってこれを行うには?sort明らかに、それだけでは事前編成順序のために動作しません。

ベストアンサー1

GNUツールを使用すると、次のことができます。

find . -regextype posix-extended \
  -regex '.*/[a-zA-Z]+[0-9]\.[0-9]{2}_[0-9]\.[0-9]{4}\.end' -print0 |
  awk -v RS='\0' -F . '
    NR == 1 || $(NF-1) < min {files=$0; min = $(NF-1); next}
    $(NF-1) == min {files = files "\n" $0}
    END {if (NR) print files}'

以下は一般的なパターンの例です。一致するファイルのNULで区切られたリストを印刷し(NULはファイルパスには現れない唯一の文字であるため)、NULに設定されたレコード区切り文字を使用して出力を処理します(ただし、すべての実装がサポートされているわけではありませんawk)。awkこれ)。

これフィールド区切り記号に設定されています.NFはフィールド数で、$(NF-1)最後のフィールドの前の最後のフィールドも同じです。awk最後に、既知の値と比較して最小の数字を見つけ、そのファイルを files awk変数に保存します。

NUL区切りリストの代わりに改行区切りリストを保存するため、ユーザー出力にのみ使用されます。確実に後処理するには、NUL("\0"awkで)を使用する必要があります。

おすすめ記事