Подсчет чисел в каждой строке для уникальной строки с использованием сценария оболочки

В вашем / etc / fstab вы автоматически монтируете компакт-диск, когда во время загрузки выдается команда «mount -a».

Измените

/dev/sr0        /media/cdrom0   udf,iso9660 user,exec     0       0

на

/dev/sr0        /media/cdrom0   udf,iso9660,user,exec,noauto     0       0
1
11.02.2017, 08:41
2 ответа

Вот решение, использующее 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
3
27.01.2020, 23:14

Возможно, вы также захотите взглянуть на утилиту GNU datamash. Пример (table.txt из PO):

$ sort -t: -k 2 table.txt | datamash -t: -g 2 sum 1 collapse 1
abc:4:1,3
def:2:2
xyz:11:10,1
  • -t: разделителем полей является :
  • -g 2 группировка по (предварительно отсортированному) второму столбцу
  • sum 1 суммировать соответствующие значения в столбце 1
  • collapse 1 и также свернуть их в "," отдельный список
3
27.01.2020, 23:14

Теги

Похожие вопросы