GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Menyelaraskan Tabel Tampilan dengan Baik?

Saya mencoba membuat skrip yang bertindak sebagai perintah ps dengan propertinya sendiri yang ingin saya tampilkan. Katakan ini adalah bagaimana proses akan terlihat seperti dalam perintah 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

Saya ingin menampilkan seperti di bawah ini:

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

Catatan: app.name property adalah argumen perintah yang diekstrak dari perintah ps

Ini skrip saya:

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;

Saat ini ia bekerja seperti yang saya inginkan. Namun terkadang penyelarasan menjadi kacau. Bisakah skrip ini dioptimalkan menjadi satu baris perintah?

Bantuan apa pun akan dihargai.

Jawaban yang Diterima:

Bisakah skrip ini dioptimalkan menjadi satu baris perintah?

Saya akan mempertimbangkan untuk menggunakan -o pilihan ps perintah untuk menampilkan (sejauh mungkin) hanya bidang yang diminati, dan kemudian memprosesnya untuk mencocokkan java proses dan argumen perintah khusus yang Anda perlukan – seperti

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

atau mungkin sesuatu seperti ini di perl (PENAFIAN:pengetahuan perl saya samar )

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. Cara menggunakan perintah ketik (menampilkan informasi tentang perintah) di Linux

  2. Bagaimana Cara Menjadwalkan Perintah Rsync?

  3. Cara Menampilkan Tabel Perutean di Linux

  1. Cara menggunakan Perintah Su di Linux

  2. Bagaimana cara menampilkan hanya file dari perintah aws s3 ls?

  3. Bagaimana cara menampilkan jalur saat ini di command prompt di linux sh (bukan bash)?

  1. Cara Menampilkan Baris Tertentu dari File di Baris Perintah Linux

  2. Perintah ls Linux

  3. Cara menggunakan perintah netstat di Linux (Contoh disertakan)