Получение значения прошедшего времени из файла

Мне нужно получить результат прошедшего времени из файла. Мне нужно значение непосредственно перед "elapsed", то есть 2:10:42.

Содержание файла:

312.90user 15.57system 2:10:42elapsed 4%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (1major+152440minor)pagefaults 0swaps
0
20.04.2017, 21:20
3 ответа

Просто сделайте следующее:

Предполагая, что ваши данные находятся в файле с именем file , вы можете сделать это:

$ head -1 file | awk '{ print $3 }' | sed 's/elapsed//'

И это вернет: 2:10:42


Разбивка на части:

Возьмите первую строку вашего файла с помощью:

head -1 file

Тяжелую работу выполняет awk :

awk '{ print $3 }'

который просто печатает третий блок данных 2: 10: 42elapsed .

Затем используйте строковый редактор sed , чтобы привести в порядок:

sed 's/elapsed//'

Вы можете перенаправить вывод куда угодно, например, просто добавьте:

> output.text

в вывод 2:10:42 в файл с именем output.txt

Вышеупомянутое приведет к затиранию (замене) любого содержимого в файле output.txt . Если вы хотите добавить данные в конец файла, просто используйте >> вместо > .

0
28.01.2020, 04:47

Относительно просто с Perl:

perl -n -E '/([0-9:]+)elapsed/ and say $1' «FILE»

Обратите внимание, что просто ищет что-то похожее на время перед словом «прошедшее» (без пробелов). Это может привести к ложному срабатыванию при применении к другим файлам. Кроме того, он проверяет каждую строку в файле (и выводит все найденное время), а не только первую.

0
28.01.2020, 04:47

В строках, содержащих «(время) прошедшее», найдите «(что-нибудь) (пространство) (время) прошедшее (что-нибудь)» и замените все на «(время)», а затем выведите получившуюся строку:

sed -n '/[0-9:]*elapsed/ { s/.* \([0-9:]*\)elapsed.*/\1/;p }' input > output
0
28.01.2020, 04:47

Теги

Похожие вопросы