Мне нужно получить результат прошедшего времени из файла. Мне нужно значение непосредственно перед "elapsed", то есть 2:10:42
.
Содержание файла:
312.90user 15.57system 2:10:42elapsed 4%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (1major+152440minor)pagefaults 0swaps
Просто сделайте следующее:
Предполагая, что ваши данные находятся в файле с именем 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 . Если вы хотите добавить данные в конец файла, просто используйте >>
вместо >
.
Относительно просто с Perl:
perl -n -E '/([0-9:]+)elapsed/ and say $1' «FILE»
Обратите внимание, что просто ищет что-то похожее на время перед словом «прошедшее» (без пробелов). Это может привести к ложному срабатыванию при применении к другим файлам. Кроме того, он проверяет каждую строку в файле (и выводит все найденное время), а не только первую.
В строках, содержащих «(время) прошедшее», найдите «(что-нибудь) (пространство) (время) прошедшее (что-нибудь)» и замените все на «(время)», а затем выведите получившуюся строку:
sed -n '/[0-9:]*elapsed/ { s/.* \([0-9:]*\)elapsed.*/\1/;p }' input > output