awk '{ sum += $2 } END { printf("Total: %.2f\n", sum); }' $2
将第 2 列相加(即$2
in the awk
script) 由 shell 脚本参数命名的文件$2
(充满了混乱的机会)并在最后打印结果。
我对此一无所知awk
。它看起来很有希望,但我什至不知道如何运行你们发布的那些俏皮话。
在您的脚本的上下文中:
#!/bin/bash
if [[ $# -eq 2 ]]
then
awk '{ sum += $2 } END { printf("Total: %.2f\n", sum); }' $2
else
echo "Usage: $0 arg1 receipts-file" >&2; exit 1
fi
或者只是将其写在命令行上,用收据文件名替换$2
之后awk
命令。或者将其留空并从文件重定向。或者输入日期和值。或者,...
您的脚本需要两个参数,但不使用第一个参数,这有点令人费解。
正如评论中所述,您可以将其简化为:
#!/bin/bash
exec awk '{ sum += $2 } END { printf("Total: %.2f\n", sum) }' "$@"
或者甚至充分利用 shebang:
#!/usr/bin/awk -f
{ sum += $2 }
END { printf("Total: %.2f\n", sum) }
内核将执行awk
对于你来说,这就是awk
脚本写成两行程序。当然,如果awk
is in /bin/awk
,那么你必须修复shebang线; shell 在很多地方寻找awk
并且可能会找到它。因此,坚持使用 shell 脚本是有好处的。如果没有指定文件,这两个修订版本只是对标准输入上的内容进行求和,或者如果在命令行上指定了一个或多个文件,则对所有指定文件中的内容进行求和。