how do i loop through the current directory and process only *.txt files
是您的操作系统的问题,而不是 awk。
每个文件名都存储在 awk 的 FILENAME 变量中。
为避免噩梦般的 Windows 引用问题,请将您的脚本放在一个文件中(例如 named foo.awk
),然后使用awk -f foo.awk <input_files>
where<input_files>
表示您的操作系统提供的输入文件列表(在 UNIX 中是*.txt
或类似的)运行该文件。
根据您发布的脚本, foo.awk 将包含:
BEGIN { FS="\t" }
{ sum[FILENAME] += $2 }
END {
for (i=1;i<ARGC;i++)
printf "%s %15d\n", ARGV[i], sum[ARGV[i]] >> "output.txt"
}
但我怀疑你误用了“>>”,而真的想要“>”。您可能还想> "output.txt"
完全退出 awk 脚本,只在命令行上重定向输出,这样您就可以在同一个地方看到输入和输出文件。
我不知道什么how can one pass the output of printf ("""%%15d""",sum) to a variable?
意思。
要使用类似打印的格式并将结果分配给您将使用sprintf()
而不是 的变量printf
,例如:
$ awk 'BEGIN{ foo = sprintf("%s",3.79); print foo}'
3.79
$ awk 'BEGIN{ foo = sprintf("%d",3.79); print foo}'
3
$ awk 'BEGIN{ foo = sprintf("%.4f",3.79); print foo}'
3.7900