GNU/Linux >> Linux Esercitazione >  >> Linux

Come allineare bene una tabella di visualizzazione?

Sto cercando di creare uno script che agisca come un comando ps con le proprie proprietà che voglio visualizzare. Supponiamo che questo sia l'aspetto dei processi nel 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

Voglio visualizzare come di seguito:

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

Nota: il app.name proprietà è un argomento di comando che viene estratto dal comando ps

Questo è il mio copione:

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;

In questo momento funziona come voglio. Ma a volte l'allineamento viene avvitato. Inoltre, questo script può essere ottimizzato in un comando a riga singola?

Qualsiasi aiuto sarebbe apprezzato.

Risposta accettata:

Inoltre, questo script può essere ottimizzato in un comando a riga singola?

Prenderei in considerazione l'utilizzo di -o opzione del ps comando per emettere (per quanto possibile) solo i campi di interesse, quindi post-elaborazione che corrisponda a java processi e argomenti di comando specifici di cui hai bisogno, qualcosa come

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 forse qualcosa del genere in perl (DISCLAIMER:la mia conoscenza di Perl è imprecisa )

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. Come usare il comando Su in Linux

  2. Come pianificare un comando Rsync?

  3. Comando ls di Linux

  4. Come utilizzare il comando netstat in Linux (esempi inclusi)

  5. Come visualizzare il percorso corrente nel prompt dei comandi in sh di Linux (non bash)?

Come visualizzare la cronologia di Bash senza numeri di riga

Come visualizzare i dettagli di sistema e hardware in CentOS 8

Come visualizzare i file gif in Ubuntu Terminal

Come visualizzare due file affiancati in Linux

Come usare il comando PS

Come usare il comando TOP