![如何在 AWK 命令中新增多個搜索](https://rvso.com/image/50595/%E5%A6%82%E4%BD%95%E5%9C%A8%20AWK%20%E5%91%BD%E4%BB%A4%E4%B8%AD%E6%96%B0%E5%A2%9E%E5%A4%9A%E5%80%8B%E6%90%9C%E7%B4%A2.png)
我正在嘗試搜尋六月、七月和八月創建的文件。我用了這個方法
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"