Общая сумма столбца сценария Bash, когда другой столбец равен входному значению

В текущей версии Debian (10 )udevdтеперь systemd-udevd, и это не путь по умолчанию; вам нужно бежать

/lib/systemd/systemd-udevd --debug &

вместо этого.

0
06.11.2020, 21:00
2 ответа

СМОП.

Сначала используйте grepдля выбора строк, используйте cutдля извлечения поля и суммирования значений.

Не проверено

#!/bin/bash
pat="$1"
export total=0
grep ",$pat," file.txt |\
  cut -d, -f6 |\
  while read num ; do
    total=$total + $num
  done
echo "$total"
0
18.03.2021, 22:51

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

Тем не менее, ваша попытка близка (одной очевидной проблемой является пробел вокруг =в вашем total_lengthзадании ).

#!/bin/bash

sum=0
while IFS=, read -a fields; do
  if [[ ${fields[12]} = "$1" ]]; then
    (( sum += fields[5] ))
  fi
done < file.csv

printf 'sum: %d\n' "$sum"

Вы можете сократить if..then..fiс помощью короткой логики -схемы, если хотите, например.

[[ ${fields[12]} = "$1" ]] && (( sum += fields[5] ))

Нет необходимости явно пропускать строку заголовка, так как она не пройдет тест ${fields[12]} = "$1".

0
18.03.2021, 22:51

Теги

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