Intereting Posts
Средство просмотра изображений с автоматической перезагрузкой при смене файла? Как найти и заменить только определенное слово (которое находится в конце файла) с помощью команды оболочки? Как я могу получить тип данных переменных в zsh? Как искать текстовый файл для определенного целого Как указать команду вызова для обязательной короткой или длинной опции? используйте 'find' для поиска каталогов !, содержащих определенный filetype foo Lightdm: запуск среды рабочего стола в зависимости от того, какой пользователь вошел в систему Начинающий вопрос: доступ к сетевому местоположению в домене Могу ли я поставить более одного условия, если? Как проверить, какую оболочку я использую в терминале? Петля, чтобы проверить, установлен ли пакет Debian или нет. Как поместить туннель в туннель? Как определить, сколько файлов находится в каталоге без учета? вызов команды из скрипта и сохранение стиля Понимание использования диска btrfs для одного объема данных

Печать столбцов в формате AWK на основе номера столбца и условия соответствия шаблона

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

ps -eopid,lstart,cmd | grep java |grep -v grep 

Ниже приведен пример ввода команды awk:

 17524 Wed May 9 08:50:37 2018 /opt/java/latest/bin/java -client -Xms256m -Xmx512m -XX:CompileThreshold=8000 -XX:PermSize=128m -XX:MaxPermSize=256m -Dweblogic.Name=AdminServer -Djava.security.policy=/app/oracle/wls1036/wlserver_10.3/server/lib/weblogic.policy -Dweblogic.system.BootIdentityFile=/projects/domainName/servers/AdminServer/security/boot.properties -Dweblogic.nodemanager.ServiceEnabled=true -Xverify:none -da -Dplatform.home=/app/oracle/wls1036/wlserver_10.3 -Dwls.home=/app/oracle/wls1036/wlserver_10.3/server -Dweblogic.home=/app/oracle/wls1036/wlserver_10.3/server -Ddomain.home=/projects/domainName -Does.client.home=/app/oracle/wls1036/oesclient -Doracle.home=/app/oracle/wls1036/oesclient -Doracle.security.jps.config=/projects/mydomain/config/oeswlssmconfig/AdminServer/jps-config.xml -Dweblogic.management.discover=true -Dwlw.iterativeDev= -Dwlw.testConsole= -Dwlw.logErrorsToConsole= -Dweblogic.ext.dirs=/app/oracle/wls1036/patch_wls1036/profiles/default/sysext_manifest_classpath:/app/oracle/wls1036/patch_ocp371/profiles/default/sysext_manifest_classpath weblogic.Server 

Пример вывода:

 24519 Wed May 9 23:50:09 2018 -Dweblogic.Name=AdminServer 

Проблема: я могу напечатать значение начального PID, даты и времени запуска, основываясь на номере столбца, используя awk, но номер столбца последнего значения может отличаться в некоторых случаях (например, столбец 9 в одном выводе и столбец 17 в другом). Как я могу напечатать последнее значение в поиске соответствующего номера столбца, содержащего ключевое слово “-Dweblogic.Name =”, и добавить к существующему выводу. Объединение вывода для номеров столбцов и поиска по столбцам – исключение. Любой более простой способ форматирования этого вывода приветствуется, используя (sed, grep, cut и т. Д.).

чтобы получить столбец, используйте цикл

 | awk '{for(i=$NF;i>1;i--) if ( $i ~ /-Dweblogic.name/ ) { wln=$i; break } ; printf "... %s ...",wln}' 

где

  • $NF – последнее поле
  • Конструкция for( ) зацикливается от конца строки до начала
  • $i ~ /-Dweblogic.name/ match -Dweblogic.name = admin1, -Dweblogic.name = otheradmin (вы можете захотеть, чтобы / ^ – D / не совпадало с вами)

могу ли я попросить вас бросить grep java | grep -v grep grep java | grep -v grep to grep [j]ava ведьма не будет grep самой (и не удивлять коллег), или

 | awk '/java/ {...} ' 

или иметь максимальное число аргументов:

 | awk '/java/ && NF>10 { ... }' 

Возможно, вы можете найти Dweblogic с помощью grep, а затем с помощью sed

 search="-Dweblogic.Name=" ps -eopid,lstart,cmd | \ grep "java.*$search" | \ sed -E 's#([^/]* )/.*('"$search"'[^ ]*).*#\1\2#'