в новинку для 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, который текстовый файл еще более труден считать в фактическом редакторе, потому что его формат, но я присоединю снимок экрана 'самого чистого' представления его.
awk
Вы хотите, должен быть следующие:
awk -F '=' '/^-/{gsub(/\-*$/,"",$2);print $2}' input.txt
Идея здесь состоит в том, что мы используем =
как столбец (или в awk терминологии - поле) разделитель. По сути, в Вашей желаемой строке, которая содержит процессорное время, у Вас есть только один =
, который сделал бы все слева зарегистрированным $1
и справа от него - $2
.
После этого это - простое /PATTERN/ {ACTION}
структура. Только строкам, которые соответствуют шаблону запуска с тире, отключат конечных тире, и затем что остается, процессорное время.
Ваши "единицы" являются группами из 5 строк. В этой ситуации это может быть полезно для:
awk '{print $1, $11}' RS="cpu =" logfile
Где RS="cpu ="
переопределяет разделитель записей (RS) как "CPU =". Затем это - просто вопрос печати желаемых полей