Bash не может иметь дело с десятичными числами, но он может обработать простое управление целыми числами, просто необходимо использовать прием как замена процесса для создания переменной доступной вне цикла:
n=0;while read i; do let n+=$i; done < <(awk '{print $1}' foo); echo $n;
или
n=0;while read i; do n=$((n+i)); done < <(awk '{print $1}' foo); echo $n;
n=0
должен там только удостовериться это $n
всегда 0, иначе, выполняя эти команды, которые второй раз возвратил бы 252 вместо 126.
В то время как самый простой путь состоял бы в том, чтобы использовать gawk
для создания вычисления Вы могли также использовать остроту Perl:
awk '{print $1}' foo | perl -lne '$k+=$_;END{print "$k"};'
-l
флаг удаляет новые строки (chomp
) и добавляет один в конец каждой печатной строки, -n
средства читают файл линию за линией, сохраняя каждую строку как $_
и запущенный скрипт, обеспеченный -e
.
Или сделайте все это в Perl:
perl -alne '$k+=$F[0];END{print "$k"};' foo
-a
флаг для Perl включает автоматическое разделение строки (как gawk
). По умолчанию поля разделяются на пробелах, но это может быть изменено с помощью -F
. Получающиеся поля сохраняются как @F
выстройте, таким образом, 1-е поле $F[0]
.
.
ты должен:
установить запятую как «разделитель полей по умолчанию»,
Вопрос, больше ли число полей, чем 1, и есть ли содержимое в поле номер 2.
Распечатайте всю строку (регистра ), используя переменную $0.
Ваши данные хранятся в файле :data -Exercise.txt
Это код:
awk 'BEGIN{FS=",";}{if(NF>1 && $2!="") print $0;}' data-exercise.txt