2016-05-17 3 views

ответ

1
$ cat data 
Hi, this is 25 ... 
Lalala 21 or 29 what is ... 79? 
$ grep -oP '\b\d+\b' data | paste -s -d '+' | bc 
154 
+0

К сожалению, я должен сделать это с помощью команды AWK –

3

С этого beautiful answer by hek2mgl о том, как извлечь наибольшее количество в файле, давайте поймать все числа в файле и просуммировать их:

$ awk '{for(i=1;i<=NF;i++){sum+=$i}}END{print sum}' RS='$' FPAT='-{0,1}[0-9]+' file 
154 

Это устанавливает разделитель таким образом, что весь блок текста является уникальной записью. Затем он устанавливает FPAT так, что каждый номер (положительный или отрицательный) является другой области:

FPAT #

Регулярное выражение (как строка), которая говорит поглазеть для создания полей на основе текст, который соответствует регулярному выражению. Назначение значения для FPAT переопределяет использование FS и FIELDWIDTHS для поля .

+0

Это работает !!! Большое спасибо! –

+0

Могу ли я задать вам еще один вопрос об awk? (: –

+0

@MikeJames yep, но, вероятно, стоит [задать другой вопрос] (http://stackoverflow.com/questions/ask). – fedorqui

0

С grep и awk:

$ cat test.txt 
Hi, this is 25 ... 
Lalala 21 or 29 what is ... 79? 
$ grep '[0-9]\+' -o test.txt | awk '{ sum+=$1} END {print sum}' 
154 
+0

Не делайте этого. 'Grep' ничего не может сделать' awk' can «т. –

Смежные вопросы