Intereting Posts
Подключение к Wi-Fi сети через командную строку Настройка монитора HP DisplayPort с поддержкой Fedora Сценарий Bash – запуск приложения и отображение живого выхода Cron Daemon – ошибки LibClamAV Как перенести аргументы командной строки с помощью emacs keybindings? Bluetooth-мышь отключается Thinkpad T400: приостановка HD не возобновляется Как удалить стандартные «доверенные» корневые центры сертификации Не удается загрузить kali linux после dist-upgrade, stucks в 'Загрузка начального ramdisk …' Как отключить «apt-daily.service» на изображении виртуальной виртуальной машины Ubuntu? Приложить к трубе и пройти дальше? Поиск строк в текстовом файле для шаблона между двумя позициями и печать всей строки Как я могу найти конкретный исходный код ядра на моей машине Проверьте, принадлежит ли IP к определенному диапазону Как перечислить файлы в zip без дополнительной информации в командной строке

Суммируйте значения в столбце, кроме заголовка

У меня есть файл, указанный ниже

-------------------------------------------------------------- Name_Customer Item_Purchased Item_Amount Credit -------------------------------------------------------------- Tom H1_P 7657 N/A Pras Track_1 23 N/A Cha Brace 9 N/A Moh kite37 269 N/A Prab Bols 87699 N/A 

Мне нужно добавить значения под столбцом Item_Amount , проигнорировав заголовок в файле и напечатав сумму как

 Total Amount collected = 95657 

 awk '{s+=$3}END{print s}' yourfile 

Довольно тривиально, используя только awk . Предполагая, что данные примера находятся в файле, ex.txt :

 $ awk '{total = total + int($3)}END{print "Total Amount collected = "total}' ex.txt 

пример

 $ awk '{total = total + $3}END{print "Total Amount collected = "total}' ex.txt Total Amount collected = 95657 

Детали

Используя awk мы собираем значения из 3-го столбца ( $3 ) и накапливаем их итоговое значение в total переменных. После завершения, как последнее, что нужно сделать, END{..} , мы печатаем сообщение вместе со значением переменной total .

Подход awk вероятно, самый простой. Вот несколько других вариантов:

Perl:

 perl -lane '$k+=$F[2];END{print $k}' foo.txt 

Чистые ядра:

 t=0; tail -n +4 foo.txt | tr -s ' ' '\t' | cut -d $'\t' -f 3 | while read i; do let t+=$i; echo $t; done | tail -n 1 
 total=0; for n in $( tail -n +4 /tmp/reports.txt | awk '{print $3}') ; do total=$( expr $total + $n ); done ; echo ">>$total" 

Этот трубопровод должен выполнять работу:

 tail -n +4 the_file | awk '{ sum += $3 } END { printf "Total Amount collected = %d\n", sum }'