GNU/Linux >> Tutoriels Linux >  >> Linux

Comment bien aligner un tableau d'affichage ?

J'essaie de créer un script qui agit comme une commande ps avec ses propres propriétés que je veux afficher. Disons que voici à quoi ressembleraient les processus dans la commande 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

Je veux afficher comme ci-dessous :

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

Remarque : le app.name propriété est un argument de commande extrait de la commande ps

Voici mon script :

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;

Pour l'instant ça marche comme je le veux. Mais parfois l'alignement se fout en l'air. Ce script peut-il également être optimisé en une seule ligne de commande ?

Toute aide serait appréciée.

Réponse acceptée :

Ce script peut-il également être optimisé en une seule ligne de commande ?

J'envisagerais d'utiliser le -o option du ps commande pour afficher (dans la mesure du possible) uniquement les champs d'intérêt, puis post-traiter cela pour faire correspondre le java processus et arguments de commande spécifiques dont vous avez besoin - quelque chose comme

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

ou peut-être quelque chose comme ça dans perl (AVIS DE NON-RESPONSABILITÉ :mes connaissances en perl sont sommaires )

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. Comment utiliser la commande Su sous Linux

  2. Comment utiliser le type de commande (afficher des informations sur la commande) sous Linux

  3. Comment afficher des lignes spécifiques d'un fichier dans la ligne de commande Linux

  4. Comment utiliser la commande netstat sous Linux (exemples inclus)

  5. Comment quitter si une commande a échoué ?

Comment afficher l'historique de Bash sans numéros de ligne

Comment afficher les détails du système et du matériel dans CentOS 8

Comment afficher des fichiers gif dans Ubuntu Terminal

Comment afficher deux fichiers côte à côte sous Linux

Comment utiliser la commande PS

Comment utiliser la commande TOP