![AWK コマンドで複数の検索を追加する方法](https://rvso.com/image/50595/AWK%20%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E8%A4%87%E6%95%B0%E3%81%AE%E6%A4%9C%E7%B4%A2%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
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
は、ファイルに関する情報を人間が読める形式で表示するコマンドです。スクリプトでは使用しないでください。
ディレクトリツリー内の特定の条件に一致するファイルを検索するコマンドはfind
GNU 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"