2013-02-13 45 views
0

有人可以解釋爲什麼這個命令不打印出沒有換行符的PID列表? 我希望輸出這樣的:Linux awk命令不能正確打印整數?

1234 5678 123 456 

我嘗試了所有這些,和他們沒有工作

ps -eww --no-headers -o pid,args | grep 'usr' | awk '{ printf "%d ", $1 }' 
ps -eww --no-headers -o pid,args | grep 'usr' | awk '{ printf "%s ", $1 }' 
ps -eww --no-headers -o pid,args | grep 'usr' | awk '{ print $1 }' | tr '\n' '' 
ps -eww --no-headers -o pid,args | grep 'usr' | awk '{ print $1 }' | tr -d '\n' 

我剛剛發現的bash工作正常,但對我來說不是zsh的

+0

你在使用什麼操作系統? OSx,Linux等?在我的OSX mnt獅子上,它可以工作,如果我刪除--no-headers。 – 2013-02-13 21:58:09

+0

前兩個應該工作,除非輸出沒有最終換行符可以與shell提示符進行一些有趣的交互。如果你把它變成'less'或'more'呢?你看到的究竟是什麼問題? – 2013-02-13 21:58:51

+0

我有紅帽zsh。嗯,我剛剛發現,bash的作品,但不是zsh,任何人都可以證實這一點? – user926958 2013-02-13 21:59:27

回答

2

zsh有一個功能讓用戶知道最後一個輸出行是部分的(即沒有最終換行符)。欲瞭解更多詳細信息,你可以在man zshoptions查找PROMPT_CR,PROMPT_SPPROMPT_EOL_MARK

您可以添加PROMPT_EOL_MARK=''~/.zshrc使局部線指標空,但我會建議反對:現在我們知道,這只是一個功能,有時候如果我們離開它使我們可以看到我們的數據有問題。在一個功能強大的終端上,百分號(PROMPT_EOL_MARK未設置時的缺省值)輸出爲加粗並且是倒置的,所以它不能與一段實際輸出混淆。

您的命令的輸出是一個完全按照您的需要的pid列表。添加最終換行符使得它也權與zsh

ps -eww --no-headers -o pid,args | awk '/usr/ { printf "%d ", $1 } END {print""}' 

(也使用使用的awk力量擺脫grep另一個答案的想法)。

1

它確實對我而言是這樣的:

ps -eww --no-headers -o pid,args | awk '/usr/{printf "%d ",$1}' 

iee awk可以搜索匹配正則表達式的字符串,因此在使用awk時並不需要grep