如何在 AWK 命令中新增多個搜索

如何在 AWK 命令中新增多個搜索

我正在嘗試搜尋六月、七月和八月創建的文件。我用了這個方法

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

如果您想要匹配特定年份而不是腳本執行時的日曆年份的文件,請新增年份。

如果您的查找實作沒有-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"

相關內容