GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo alinear bien una mesa de exhibición?

Estoy tratando de crear un script que actúe como un comando ps con sus propias propiedades que quiero mostrar. Digamos que así es como se verían los procesos en el comando ps:

sas 24431     1  0 Oct10 ?        00:51:08 /usr/lib/jvm/java-1.7.0-oracle-1.7.0.25.x86_64/jre/bin/java -Denv=DEV -Dapp.name=myApp -Xms512m -Xmx1g -Dlog.dir=/apps/java/logs

Quiero mostrar lo siguiente:

UID  PID    APPNAME
sas  24431  -Dapp.name=myApp
sas  24432  -Dapp.name=myApp2
sas  24433  -Dapp.name=myApp3

Nota: el app.name propiedad es un argumento de comando que se extrae del comando ps

Este es mi guión:

echo -e "PIDtUSERIDttAPPNAME"
ps -u $USER -f |grep "java"|grep -v "grep"|
while read LINE 
do 
  #Get pid from the line
  PID=$(cut -d" " -f2 <<< $LINE);
  #Get parameter value called "-Dapp.name or -DprojectName" 
  #from the ps command for the process
  APPNAME=$(ps -f $PID | awk 'BEGIN {RS=" "}; /-Dapp.name|-DprojectName/');
  USERID=$(cut -d" " -f1 <<< $LINE);

 echo -e $PID"t"$USERID"t"$APPNAME;
done;

Ahora mismo funciona como yo quiero. Pero a veces la alineación se jode. ¿También se puede optimizar este script en un comando de línea?

Cualquier ayuda sería apreciada.

Respuesta aceptada:

¿También se puede optimizar este script en un comando de línea?

Consideraría usar -o opción del ps comando para generar (en la medida de lo posible) solo los campos de interés, y luego procesarlos para que coincidan con java procesos y argumentos de comando específicos que necesita, algo así como

ps -u $USER -o uname=,pid=,args= | 
  gawk -vOFS='t' '/java/ {print $1,$2,substr($0,match($0,"-D(app[.]name)|(projectName)[^[:space:]]*"),RLENGTH)}'

o tal vez algo como esto en perl (DESCARGO DE RESPONSABILIDAD:mi conocimiento de Perl es incompleto )

ps -u $USER -o uname=,pid=,args= | 
  perl -anle 'print join "t", @F[0], @F[1], grep /-D(app[.]name)|(projectName)/,@F if /java/'

Linux
  1. Cómo usar el comando Su en Linux

  2. Cómo usar el comando de tipo (mostrar información sobre el comando) en Linux

  3. ¿Cómo programar un comando Rsync?

  4. Cómo mostrar líneas específicas de un archivo en la línea de comandos de Linux

  5. ¿Cómo salir si falla un comando?

Cómo mostrar el historial de Bash sin números de línea

Cómo mostrar los detalles del sistema y del hardware en CentOS 8

Cómo mostrar archivos gif en Ubuntu Terminal

Cómo mostrar dos archivos uno al lado del otro en Linux

Cómo usar el comando PS

Cómo usar el comando SUPERIOR