![在多个文件夹和子文件上应用 awk](https://linux22.com/image/170236/%E5%9C%A8%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%E5%92%8C%E5%AD%90%E6%96%87%E4%BB%B6%E4%B8%8A%E5%BA%94%E7%94%A8%20awk.png)
我有 10 个具有连续名称的文件夹:book_1、book_2..... book_10,每个文件夹都有一个与该文件夹名称相同的 txt 文件。例如:book_1 有仅有的book_1.txt 包含历史材料(仅文本)。
我需要运行一个 AWK 脚本,该脚本的输出应按顺序添加到输出文件中。如何生成一个循环,该循环运行我的文件夹并从每个文件夹中提取所需的文件?
awk '
{
script//
}
END { print "The output of book num $i is: " m }' book*/book*.txt >> output.txt // m is a variable which extracts max occurences of certain words which are set in the script
我的输出应该是这样的:
The output of book num 1 is : 123
The output of book num 2 is : 2223
等等
感谢您的帮助!
答案1
{1..10}
在支持生成一系列数字的构造的 shell 中使用任何 awk 的简单方法(否则只需使用$(seq 10)
)是:
for i in {1..10}; do
awk -v i="$i" '
{
script//
}
END { printf "The output of book num %d is : %d\n", i, m }
' "book_${i}/book_${i}.txt"
done > output.txt
但如果你真的想在 awk 中完成这一切(使用 GNU awk 作为 ARGIND 和 ENDFILE):
awk '
BEGIN {
for (i=1; i<=10; i++) {
ARGV[ARGC] = "book_" i "/book_" i ".txt"
ARGC++
}
}
{
script//
}
ENDFILE { printf "The output of book num %d is : %d\n", ARGIND, m; m=0 }
' > output.txt
如果任何“book”文件不存在,那么您需要添加一些保护措施。