Bash
使用 shell 腳本計算每行中存在的唯一字元串的數字
我正在使用 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