Shell - синтаксическая ошибка в выражении (токен ошибки "16") - PullRequest
0 голосов
/ 12 октября 2018

Я делаю проект для своего университета, и это первый раз, когда я пишу код с использованием Bash.

Я пытаюсь пройти через документ .txt, читая каждую строку и получая информациюМне нужно сделать сумму.

. Текст документа выглядит примерно так:

83210: Энрике Гаспар: EIB2: 911235444: metas@gmail.com: carro: BMW:82-RX-14: 5: 25: 26 88110: Васко Рапидо: IB2: 962222222: vrapid@gmail.com: mota: BMW: 33-MT-99: 3: 5: 16 88020: Мария Агияр: EIB2: 911555444:mguiar@gmail.com: carro: mercedes: 88-TX-11: 2: 20: 12

И для того, что я делаю, мне нужно сделать общую сумму последнего числа каждого пользователя,поэтому 26 + 16 + 12.

Вот мой код:

#!/bin/bash
echo -n "Nº de condutores: "
echo $(cat condutores.txt | wc -l)
echo -n "Nº de passageiros: "
echo $(cat passageiros.txt | wc -l)
echo -n "Saldo total dos condutores: "
x=0
linhas=$(cat condutores.txt | wc -l)
i=0
while [[ $i -le $linhas ]]; do
    sum=$(cat condutores.txt | head -$i | tail -$(( $linhas + 1 - $i )) | cut -d':' -f11)
    x=$((x+sum))
    i=$((i+1))
done
echo "$x"

Я написал здесь полностью, чтобы ничего не пропустить.

Что важно дляпроблема здесь от строки 7 до 15. Я не знаю, так ли это, я прохожу каждую строку в файлероводник.txt или что-то еще.Но я получаю эту ошибку:

Saldo total dos condutores: ./stats.sh: line 12: 26
16: syntax error in expression (error token is "16")
26

Так что по какой-то причине он читает только первую и вторую строку документа .txt, но не может сделать сумму, может кто-нибудь помочь мне здесь, пожалуйста?Заранее спасибо.

1 Ответ

0 голосов
/ 12 октября 2018

Ваша сумма $ содержит более одной строки, поэтому ее нельзя интерпретировать как число.И ваш цикл обработки текста - это кошмар, есть более чистое решение.Смотри:

x=0
while IFS=: read -r a b c d e f g h i j k; do
    x=$((x+k))
done < condutores.txt
echo "$x"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...