基本上,我从文本文件中提取一个字符串和一个整数:
cat file.txt | cut -d " " -f 1,3 | sort
输出如下所示:
white 3
white 2
white 54
red 23
red 2
yellow 22
我如何添加值与bash脚本的唯一字符串?
首先,改掉UUoC的习惯。
declare -A totals=()
while read -r color _ count _; do
totals[$color]=$(( "${totals[$color]:- 0}" + count ))
done < file.txt
for color in ${!totals[@]}; do echo "$color ${totals[$color]}"; done | sort
输出:
red 25
white 59
yellow 22
如果它非常大,在awk
中效率会更高。
示例数据文件:
$ cat file.txt
white stuff 3 more stuff
white stuff 2 more stuff
white stuff 54 more stuff
red stuff 23 more stuff
red stuff 2 more stuff
yellow stuff 22 more stuff
一个awk
解决方案来取代所有当前代码和生成总数:
awk '
{ totals[$1]+=$3}
END { for (i in totals)
print i,totals[i]
}
' file.txt
# or as a one-liner
awk '{totals[$1]+=$3} END {for (i in totals) print i,totals[i]}' file.txt
由此产生:
red 25
yellow 22
white 59
如果需要排序,则将输出管道输出到sort
,例如:
awk '{totals[$1]+=$3} END {for (i in totals) print i,totals[i]}' file.txt | sort
或者如果使用GNU awk
:
awk '
{ totals[$1]+=$3}
END { PROCINFO["sorted_in"]="@ind_str_asc"
for (i in totals)
print i,totals[i]
}
' file.txt
这两个都生成:
red 25
white 59
yellow 22