如何将第二个单词添加为文件中每行的编号?

我正在尝试添加所有的钱

$ 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 -rwhile IFS=$IFS$'r' read -r(根据戈登戴维森的评论)或...
  • 替换done < samplemoney.txtdone < <(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


以上是如何将第二个单词添加为文件中每行的编号?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>