2017-06-27 2 views
0

awkコマンドは、プロセス名を取得するために、私は以下のようにシェルスクリプトでawkコマンドを使用してプロセス名を取得しようとしています

擬似コード

app=`ssh [email protected] ps -ef | grep $procid | grep -v "grep" | awk -F ' ' '{print $NF}' | sed 's/ //' | sed 's/\.jar//'` 

サンプルログファイルがあるとして

tomcat 4818  1 1 Jun15 ?  02:46:09 /usr/local/integration-banana.jar --server.port=9023 
tomcat 10283  1 0 2016 ?  1-20:19:20 /usr/local/integration-mango.jar 
tomcat 10655  1 0 2016 ?  1-21:29:32 /usr/local/integration-grapes.jar 
tomcat 4062  1 1 Mar16 ?  1-01:47:37 /usr/local/integration-kiwi.jar --server.port=9012 
以下

所望の出力は

banana 
mango 
grapes 
kiwi 
です

しかし、この場合には、私は取得しています

--server.port 
mango 
grapes 
--server.port 
私の理解では、 NFawkコマンドプリント最後の列に使用されますが、このログファイルから、私は出ては --server.portアドレスを持つプロセス名を取得するだけでなく NFを使用する必要があります

。 これを助けてください。

+1

をしない '$のprocid'何ですか?それはprocessIdですか?またはids?その値の例を示してください。 – Kent

+0

その出力からどのように出力が得られるのかわかりません。各行の '/ usr/local/integration-'部分はどこに行きますか? –

+0

プロセスIDです。残りのコードを入れてください。 ssh tomcat @ server netstat -tulpn | grep java> /home/arun/stat.out javaprocの 'cat/home/arun/stat.out'にあります。 do procid = 'echo $ javaproc | awk -F '' {print $ NF} '| awk -F '/' '{print $ 1}' ' port =' echo $ javaproc | awk -F ':' '{print $ 2}' | awk -F '' '{print $ 1}' ' hasserverport = 'ps -ef | grep $ procid | grep -v "grep" | "$ hasserverport -gt 0"; then \t \t app = 'ssh tomcat @ server ps -ef | grep -c" server \ .port "'の場合は、 grep $ procid | grep -v "grep" | awk -F '' {print $ NF} '| sedの//'| sed 's/\。jar //' ' – Arun

答えて

0
array=($(ssh [email protected] ps -ef | awk '{print $8}') 
array=(${array[@]##*-}) 
array=(${array[@]%\.*}) 
echo "${array[@]}" 
+0

このアプローチもうまくいきました – Arun

0
awk '{ for (i=1;i<=NF;i++) { if ($i ~ /\//) { split($i,arry,".");split(arry[1],arry1,"-");print arry1[2] } } }' 

上記のawk解決策はpsの出力に有効です。各レコードでファイルパスを確認します(/に対するパターンマッチング)。次に、 "。"を使用して文字列を最初にarryという配列に分割します。この配列を使用して " - "を使ってさらに分割します。これにより、必要なファイル名のセクションが得られます。

+0

これはうまくいきました – Arun

0

ps -ef|grep|grep|sed|sed|awk......のようなコードが90%表示されている場合は、目標に間違った方向に向いています。

psのマニュアルページを読んで、psに必要な情報を提供するようにしてください。たとえば、特定のpidのプロセスのみを一覧表示するには、-p pidlistがあります。多くの出力形式オプションがあります。

あなたの特定の問題については、あなたはjpsjdkと一緒に出荷されるツールがあります。 jps<enter>でサーバに試してみてください。あなたが入手したものを見てください。 man jpsを実行してオプションをチェックしてください。それは.jarをチョップしたい場合は、sedにパイプすることができます。明らかに、それを行う方法はわかっています。

ここでも、whatever|grep|grep|sed|sed|awkgrep|sed...

関連する問題