Bash

使用 shell 腳本計算每行中存在的唯一字元串的數字

  • February 11, 2017

我正在使用 unix shell 腳本並有一個輸入文件,其數據為:

3:abc
1:xyz
1:abc
2:def
10:xyz

我的預期輸出是:

4:abc
11:xyz
2:def

即在分隔符之後的每一行上查找唯一的字元串,然後將之前的數字相加。這該怎麼做?

這是一個使用awk. 它將值累積到一個數組中。

awk -F ":" '{count[$2]+=$1} END {for (key in count) print key, count[key]}' awk_data.txt

這是一個使用bash腳本的版本:

#!/usr/bin/env bash
declare -A count
while read line; do
   key=${line##*:}
   cnt=${line%%:*}
   count[$key]=$(($cnt + ${count[$key]=0}))
done < "$1"
for K in "${!count[@]}"; do echo $K ${count[$K]}; done

評論中的另一個bash版本,使用IFS=:

#!/usr/bin/env bash
declare -A count
while IFS=: read -r cnt key; do
   count[$key]=$(($cnt + ${count[$key]=0}))
done < "$1"
for K in "${!count[@]}"; do echo $K ${count[$K]}; done

引用自:https://unix.stackexchange.com/questions/344172