私はUnixシェルスクリプトを使用しており、次のデータを含む入力ファイルがあります。
3:abc
1:xyz
1:abc
2:def
10:xyz
私の予想結果は次のとおりです。
4:abc
11:xyz
2:def
つまり、区切り文字の後の各行で一意の文字列を見つけ、その前に数字を追加します。どうすればいいですか?
ベストアンサー1
ここで使用されているソリューションがあります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