2017-06-27 43 views
0

我想在shell腳本中使用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 

我的理解是awk命令輸出的最後一列用於NF,但是從這個日誌文件我需要使用NF以及具有--server.port地址出去找進程名。 你能幫忙嗎?

+1

是什麼'$ procid'?它是processId嗎?或ID?顯示它的示例值。 – Kent

+0

我不明白你是如何得到那個輸入的輸出,每行的'/ usr/local/integration-'部分在哪裏? –

+0

它是進程id.Puting其餘的代碼 ssh tomcat @ server netstat -tulpn |對於'cat/home/arun/stat.out'中的javaproc,grep java> /home/arun/stat.out ;做 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」| grep -c「server \ .port」' if [$ hasserverport -gt 0];然後 \t \t app ='ssh tomcat @ server ps -ef | grep $ procid | grep -v「grep」| awk -F'''{print $ NF}'| sed's///'| 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爲您提供所需的信息,例如它有-p pidlist僅列出給定pids的進程。有很多輸出格式選項。

針對您的特定問題,您正在搜索java進程中,好的,有jps工具隨附jdk。只需通過jps<enter>試試你的服務器,看看你有什麼。做一個man jps,並檢查出的選項,這將是最簡單的方法來獲得java進程我想,如果你想關閉.jar,你可以管道到sed,顯然,你已經知道如何做到這一點。

再次,不要做whatever|grep|grep|sed|sed|awkgrep|sed...