簡體   English   中英

遍歷子目錄並對某些文件執行awk腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM