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

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

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

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

しかし、それは機能していません。

答え1

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

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

printこれは、Jun、July、または Aug のいずれかに一致するものをすべて返します。これは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は、ファイルに関する情報を人間が読める形式で表示するコマンドです。スクリプトでは使用しないでください

ディレクトリツリー内の特定の条件に一致するファイルを検索するコマンドはfindGNU find (つまり、非組み込み Linux または Cygwin) または FreeBSD find (つまり、FreeBSD または OSX) をお持ちの場合は、 を使用して、-newermt特定の日付以降に最後に変更されたファイルを一致させることができます。

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

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

find の実装に がない場合-newermt、 を使用する必要があります。-newerこれは、見つかったファイルの日付をfind固定ファイルと比較します。 を使用してtouch、境界として使用する日付を持つ一時ファイルを作成します。

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

関連情報