[英]Iterate through subdirectories and execute an awk script against certain files
我有一個名為../words的目錄,其中包含許多子目錄(words / blabla,words / blabla),每個子目錄又包含兩種類型的文件(。* 1.txt)和(。* 2.txt)。 我需要的是針對這些文件中的每個文件執行AWK腳本。
可能是這樣嗎?
for d in words/*
do
for f in .*[0-9].txt
do
awk -f script.awk ${f}
done
done
如果要保留for
語句結構並將awk腳本應用於每個指定的文件,可以執行以下操作:
for file in $(find words -type f -name ".*[12].txt"); do
awk -f script.awk "$file"
done
find
命令對於遞歸查找目錄中的任何文件模式很有用。
編輯:如果您的文件名包含空格之類的內容,則上述腳本可能無法正確處理它們,因此您可以執行以下操作:
find words -type f -name ".*[12].txt" -print0 | while read -d $'\0' file
do
awk -f script.awk "$file"
done
或使用xargs:
find words -type f -name ".*[12].txt" -print0 | xargs -0 awk -f script.awk
這使您可以使用空\\0
字符來分隔文件名,因此名稱間距或其他特殊字符的變化將不會成為問題。 (您可以在此處找到更多信息: 帶有空格的文件名中斷循環,並找到命令 ;或者:在此處處理帶空格的文件名 ;或者在此處: 循環查找find所返回的文件名 )。
鑒於您到目前為止告訴我們的內容,這應該是您所需要的:
awk -f script.awk ../words/blabla/.*[12].txt
如果您需要跳過中間目錄級別,僅查看子目錄下的內容,則可以使用最大/最小深度
$ find words -maxdepth 2 -mindepth 2 -type f -name '*[0-9].txt' | xargs awk -f ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.