2014-04-08 4 views
0

Я запускаю исполняемый файл, который выводит много строк на stdout. Последняя строкаКак вырезать номер на выходе исполняемого файла?

Run in 100 seconds 

код в программе C в исполняемый файл, чтобы написать последнюю строку в

printf("Ran in %g seconds\n", time); 

Так есть символ новой строки в конце.

Я хочу снять последнее число, например. 100, от стандартного вывода, так что в Баше

./myexecutable > output 

Тогда мне интересно, как дальше разобрать output, чтобы получить количество времени в Баше? Нужны ли мне некоторые приложения для этого? Спасибо!

ответ

1

Вы можете использовать grep:

grep -oP 'Ran in \K\d+' output 

или

grep -oP '(?<=Ran in)\d+(?= seconds)' output 
+0

На самом деле число может быть десятичное. поэтому мы должны изменить '\ d' на что-то еще? – Tim

+0

@Tim Поскольку мы используем lookarounds во второй форме, вы также можете заменить '\ d +' на '. *'. – devnull

1

Скажем:

s='Run in 100 seconds' 

Использование tr:

tr -cd '[[:digit:]]' <<< "$s" 
100 

Использование sed:

sed 's/[^0-9]*//g' <<< "$s" 
100 

Однако, если вы хотите, чтобы захватить последний номер в строке затем использовать эту опережения регулярное выражение:

s='Run 10 in 100 seconds' 
grep -oP '\d+(?!\D*\d)' <<< "$s" 
100 
1

Или используйте tail, чтобы захватить последнюю строку (tail -n 1 <file>) и извлечение номера либо -

Использование sed с тремя группами рисунка и печати на второй матч группы:

tail -n 1 output | sed 's/\(^Run in \)\([0-9]\+\)\(seconds$\)/\2/g'

Использование awk для печати третьего ($3) маркер:

tail -n 1 output | awk '{print $3}'

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