2013-11-01 47 views
1

我試圖獲取某個服務的PID。我嘗試這樣做,用下面的命令:AWK - 將最後一項從列表中刪除

ps aux | grep 'DynamoDBLocal' | awk '{print $2}' 

給出輸出:

1021 
1022 
1161 

這將返回我3個PID的,我想要的服務2和1的grep的只是沒有。我想從列表中刪除最後一個PID(來自grep的那個)。

我該如何做到這一點?

+1

在http://stackoverflow.com/a/3510850/1983854有一個很好的方法來討論這個話題。它是一樣的,但在那裏他們也稱'殺死'來殺死這個過程。 – fedorqui

+1

請注意'grep re | awk'{print field}'可以替換爲'awk'/ re/{print field}''。 – Thor

回答

7

只要使用pgrep,正是在這種正確的工具案例:

pgrep 'DynamoDBLocal' 
3

使用grep -v

ps aux | grep 'DynamoDBLocal' | grep -v grep | awk '{print $2}' 

如果你有pgrep在您的系統

pgrep DynamoDBLocal 
3

你可以說:

ps aux | grep '[D]ynamoDBLocal' | awk '{print $2}' 
2

有了一個調用awk

ps aux | awk '!/awk/ && /DynamoDBLocal/{print $2}' 
1

我不知道那ps aux | grep '...'是正確的方式。

不過,假設這是正確的方式,你可以做

ps aux | grep '...' | awk '{ if (prev) print prev; prev=$2 }' 
3

嘗試pidof,應該直接給你pid

pidof DynamoDBLocal 
2

回答原來的問題:如何從輸出刪除線:

ps aux | grep 'DynamoDBLocal' | awk '{print $2}' | head --lines=-1 

head允許你查看X(默認爲10)的無堅不摧的第一行給定。值X與負前置它顯示除最後的X行以外的所有行。 '反'是tail,順便說一句(當你對最後 X行感興趣)。

但是,鑑於您尋找PID的具體問題,我推薦pgrep(perreals答案)。