Парсинг с Awk

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

-------- step 0  ---- cpu =     Time_value  -------
Energy =  Energy_value1   KinEng = KinEng_value1 Temp = Temp_value1

-------- step 10 ---- cpu =     Time_value  -------
Energy =  Energy_value2   KinEng = KinEng_value2 Temp = Temp_value2

Конкретно я пытался выяснить, как использовать awk и/или grep, чтобы вытащить временную стоимость и temp_value и произвести их в файл в отдельных столбцах, чтобы быть

Time_value1 Temp_value1
Time_value2 Temp_value2
etc...

При поиске awk документации я нашел это awk '/Temp/ {print $9}' file_name дал бы мне временное значение и это awk '/cpu/ {print $7}' file_name должен дать мне time_value, но как я могу искать обе строки в одной команде при поиске различных столбцов их соответствующие строки. Другими словами, как я могу изменить строку awk '/cpu|sec/ {print}' file_name включать информацию о столбце для каждой строки.

@steeldriver: Tbh, который текстовый файл еще более труден считать в фактическом редакторе, потому что его формат, но я присоединю снимок экрана 'самого чистого' представления его.

enter image description here

1
задан 15 July 2018 в 00:36

2 ответа

awk Вы хотите, должен быть следующие:

awk -F '=' '/^-/{gsub(/\-*$/,"",$2);print $2}' input.txt

Идея здесь состоит в том, что мы используем = как столбец (или в awk терминологии - поле) разделитель. По сути, в Вашей желаемой строке, которая содержит процессорное время, у Вас есть только один =, который сделал бы все слева зарегистрированным $1 и справа от него - $2.

После этого это - простое /PATTERN/ {ACTION} структура. Только строкам, которые соответствуют шаблону запуска с тире, отключат конечных тире, и затем что остается, процессорное время.

0
ответ дан 8 December 2019 в 00:15

Ваши "единицы" являются группами из 5 строк. В этой ситуации это может быть полезно для:

awk '{print $1, $11}' RS="cpu =" logfile

Где RS="cpu =" переопределяет разделитель записей (RS) как "CPU =". Затем это - просто вопрос печати желаемых полей

0
ответ дан 8 December 2019 в 00:15

Другие вопросы по тегам:

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