我有一个名为../words的目录,其中包含许多子目录(words / blabla,words / blabla),每个子目录又包含两种类型的文件(。* 1.txt)和(。* 2。文本) 。我需要的是,针对这些文件中的每一个执行AWK脚本。
可能是这样吗?
for d in words/*
do
for f in .*[0-9].txt
do
awk -f script.awk ${f}
done
done
答案 0 :(得分:2)
如果要保留...
语句结构并将awk脚本应用于每个指定的文件,可以执行以下操作:
for
for file in $(find words -type f -name ".*[12].txt"); do
awk -f script.awk "$file"
done
命令对于递归浏览目录中的任何文件模式非常有用。
编辑:如果您的文件名包含空格等内容,则上述脚本可能无法正确处理,因此您可以执行以下操作:
find
或使用xargs:
find words -type f -name ".*[12].txt" -print0 | while read -d $'\0' file
do
awk -f script.awk "$file"
done
这允许您使用空find words -type f -name ".*[12].txt" -print0 | xargs -0 awk -f script.awk
个字符分隔文件名,因此名称间距或其他特殊字符的变化不会成为问题。 (您可以在此处找到更多信息:Filenames with spaces breaking for loop, and find command或此处:Handling filenames with spaces或此处:loop through filenames returned by find)。
答案 1 :(得分:1)
鉴于你到目前为止告诉我们的内容,这应该是你所需要的:
awk -f script.awk ../words/blabla/.*[12].txt
答案 2 :(得分:1)
如果您需要跳过中间目录级别,只需在子目录下查看,您可以使用最大/最小深度
$ find words -maxdepth 2 -mindepth 2 -type f -name '*[0-9].txt' | xargs awk -f ...