gpt4 book ai didi

windows - AWK。循环遍历目录并求和列

转载 作者:可可西里 更新时间:2023-11-01 11:13:04 24 4
gpt4 key购买 nike

我正在尝试对一列求和并将输出与文件名一起写入。我写了以下行,它运行良好并输出总和。我正在为两件事而苦苦挣扎。将文件名与输出一起传递,以及如何循环遍历当前目录并仅处理 *.txt 文件。请注意,我正在通过 Windows 7 中的批处理文件 (.bat) 运行它。谢谢

awk -F"\t" "{ sum+=$2} END {printf ("""%%15d""",sum) >>"output.txt"}" input.TXT 

另外,如何将 printf ("""%%15d""",sum) 的输出传递给变量?

最佳答案

how do i loop through the current directory and process only *.txt files是您的操作系统的问题,而不是 awk 的问题。

每个文件名都存储在 awk 的 FILENAME 变量中。

为避免噩梦般的 Windows 引用问题,请将您的脚本放入一个文件中(例如命名为 foo.awk ),然后使用 awk -f foo.awk <input_files> 运行该文件其中 <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

关于windows - AWK。循环遍历目录并求和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18790790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com