So fügen Sie mehrere Suchvorgänge im AWK-Befehl hinzu

So fügen Sie mehrere Suchvorgänge im AWK-Befehl hinzu

Ich versuche, nach den in den Monaten Juni, Juli und August erstellten Dateien zu suchen. Ich habe diese Methode verwendet

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

aber es funktioniert nicht.

Antwort1

Sie können mehrere Muster wie folgt abgleichen:

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

printDies gibt alle Übereinstimmungen für Juni, Juli oder August zurück. Sie benötigen die Anweisung nicht, da dies awkdie Standardaktion ist.

Antwort2

Generell ist es eine sehr schlechte Idee,Analysieren Sie die Ausgabe von lsEin besserer Weg, das zu tun, was Sie wollen, ist

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

Alternativ können Sie nur das letzte Feld überprüfen, um den unwahrscheinlichen Fall abzusichern, dass der Dateiname selbst ein Datum ist:

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

Aus 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

Antwort3

lsist ein Befehl zum Anzeigen von Informationen über Dateien in einer für Menschen lesbaren Form.Verwenden Sie es nicht in Skripten.

Der Befehl zum Suchen von Dateien in einem Verzeichnisbaum, die bestimmten Kriterien entsprechen, lautetfind. Wenn Sie über GNU find (also nicht eingebettetes Linux oder Cygwin) oder FreeBSD find (also FreeBSD oder OSX) verfügen, können Sie damit -newermtDateien abgleichen, die zuletzt nach einem bestimmten Datum geändert wurden.

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

Fügen Sie ein Jahr hinzu, wenn Sie Dateien in einem bestimmten Jahr abgleichen möchten, und nicht im Kalenderjahr, in dem das Skript ausgeführt wird.

Wenn Ihre Find-Implementierung nicht über verfügt -newermt, müssen Sie sich mit begnügen -newer, das das Datum der findgefundenen Datei mit einer festen Datei vergleicht. Verwenden Sie , touchum temporäre Dateien mit dem Datum zu erstellen, das Sie als Grenze verwenden möchten.

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

verwandte Informationen