我有一个名为../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所返回的文件名。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句