AWKコマンドに複数の検索を追加する方法

AWKコマンドに複数の検索を追加する方法

6月、7月、8月に生成されたファイルを検索しようとしています。私はこの方法を使用しました

ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'

しかし、うまくいきません。

答え1

以下のように複数のパターンを一致させることができます。

awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)

これで Jun、July、August がすべて返されます。printこれがawk基本的な操作なので、このステートメントは必要ありません。

答え2

一般的に言えば、これは非常に悪い考えです。lsの出力を解析します。。欲しいものを行うより良い方法は

stat -c "%n %y" * | grep 2013-0[678]

または、ファイル名自体が日付の場合を防ぐには、最後のフィールドのみを確​​認してください。

stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/' 

からman stat

   -c  --format=FORMAT
          use the specified FORMAT instead of the default; output  a  new‐
          line after each use of FORMAT

   %y     time of last modification, human-readable
   %n     file name

答え3

ls人間が読める形式でファイルに関する情報を表示するコマンド。スクリプトでは使用しないでください

ディレクトリツリーで特定の基準に一致するファイルを検索するコマンドは次のとおりです。find。 GNU検索(組み込みLinuxやCygwinなど)やFreeBSD検索(FreeBSDやOSXなど)がある場合は、特定の-newermt日付以降に最後に変更されたファイルを一致させるために使用できます。

find . -newermt '1 June' ! -newermt '1 September' -print

スクリプトが実行される年ではなく、特定の年と一致するファイルが必要な場合は、年を追加します。

検索実装で見つかったファイルの日付を固定ファイルと比較することがない場合は、使用する必要があり-newermtます。使用する日付に制限された一時ファイルを作成するために使用されます。-newerfindtouch

dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"

関連情報