如何将第二个单词添加为文件中每行的编号?
我正在尝试添加所有的钱
$ cat samplemoney.txt
Company1 100
Company2 200
Company3 100
Company4 300
Company5 200
以下是shell脚本
#!/bin/sh
sum=0;
while read l;
do
IFS=' ' read -r -a array<<< "$l"
a=${array[1]}
sum=`expr $sum+$a`
done<samplemoney.txt
echo $sum
输出获取:
0+100+200+100+300
所需输出:
900
900
注意 - 在 Windows 上使用 Git Bash
回答
while 可以直接从文件中读取(即不需要数组),例如:
sum=0
while read -r company amount
do
(( sum+=amount ))
done < samplemoney.txt
echo "${sum}"
笔记:
sum+=amount只要你处理整数就可以工作;如果你发现你需要使用实数/浮点数,那么从一个bash角度来看它会变得有点复杂(尽管威廉珀塞尔的awk解决方案应该适用于整数和实数/浮点数)- 的
(( sum+=amount ))要求bash(例如,#!/bin/bash); 虽然 OP 的代码显示#!/bin/sh(我假设是 bourne shell),但问题也被标记为bash(我认为这意味着 OP 也可以访问bash)
这会产生:
OPgit/bash在 Windows 上运行时遇到问题,出现错误:
")syntax error: invalid arithmetic operator (error token is "
这似乎是r数据文件中Windows 行结尾 ( )的问题。
OP有几个选项:
- 运行
dos2unix samplemoney.txt(除去r运行前的)while环或... - 替换
while read -r为while IFS=$IFS$'r' read -r(根据戈登戴维森的评论)或... - 替换
done < samplemoney.txt为done < <(tr -d 'r' < samplemoney.txt)
回答
这对于 awk 来说几乎是微不足道的:
$ cat money.txt
Company1 100
Company2 200
Company3 100
Company4 300
Company5 200
$ awk '{s += $2} END {print s}' money.txt
900