【发布时间】:2018-09-27 01:29:31
【问题描述】:
我有一个包含以下记录的文件:
$ cat sample.txt
ABC,100
XYZ,50
ABC,150
QWE,100
ABC,50
XYZ,100
期望输出为:
$ cat output.txt
ABC,300
XYZ,150
QWE,100
我尝试了以下脚本:
PREVVAL1=0
SUM1=0
cat sam.txt | sort > /tmp/Pos.part
while read line
do
VAL1=$(echo $line | awk -F, '{print $1}')
VAL2=$(echo $line | awk -F, '{print $2}')
if [ $VAL1 == $PREVVAL1 ]
then
SUM1=` expr $SUM + $VAL2`
PREVVAL1=$VAL1
echo $VAL1 $SUM1
else
SUM1=$VAL2
PREVVAL1=$VAL1
fi
done < /tmp/Pos.part
我想获得一些线性命令来获得所需的输出。想要避免 while 循环的概念。我只想添加第一列相同的数字并将其显示在一行中。
【问题讨论】:
-
使用
awk会很容易,只需在关联数组中累加即可。 -
您不需要使用
awk以逗号分隔行。使用while IFS=, read VAL1 VAL2 -
我需要跳出 while 循环,只需要获得一些相同的线性命令。有可能吗?
-
顺便说一句,考虑通过shellcheck.net 运行您的代码并修复它找到的内容。在现代代码中没有理由使用
expr,并且为您处理的每一行运行一个新的awk副本的管道非常效率低下。