GNU/Linux >> Znalost Linux >  >> Linux

Jak pěkně zarovnat tabulku displeje?

Snažím se vytvořit skript, který funguje jako příkaz ps s vlastními vlastnostmi, které chci zobrazit. Řekněme, že takto by procesy vypadaly v příkazu 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

Chci zobrazit níže:

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

Poznámka: app.name vlastnost je argument příkazu, který je extrahován z příkazu ps

Toto je můj skript:

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;

Momentálně to funguje tak, jak chci. Někdy se ale zarovnání zvrtne. Lze také tento skript optimalizovat do jednoho řádku?

Ocenili bychom jakoukoli pomoc.

Přijatá odpověď:

Lze také tento skript optimalizovat do jednoho řádku?

Zvažoval bych použití -o možnost ps příkaz pro výstup (pokud je to možné) pouze pole zájmu a následné zpracování, aby odpovídalo java procesy a specifické argumenty příkazu, které požadujete – něco jako

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

nebo možná něco takového v perl (ODPOVĚDNOST:moje znalosti perlu jsou útržkovité )

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. Jak naplánovat příkaz Rsync?

  2. Jak používat příkaz netstat v systému Linux (včetně příkladů)

  3. Jak ukončit, pokud příkaz selhal?

  1. Jak používat Su Command v Linuxu

  2. Jak používat příkaz typu (zobrazit informace o příkazu) v Linuxu

  3. Jak zobrazit pouze soubory z příkazu aws s3 ls?

  1. Jak zobrazit konkrétní řádky souboru v příkazovém řádku Linuxu

  2. Příkaz Linux ls

  3. Jak zobrazit směrovací tabulku v Linuxu