व्हॉट्सएप के बिना 'ps' कमांड आउटपुट को फॉर्मेट करें


11

मेरे पास psकुछ गुणों के साथ सभी चल रही प्रक्रियाओं के विशेष गुण प्राप्त करने के लिए निम्नलिखित कमांड है:

ps --no-headers -exo "uname,ppid,pid,etime,%cpu,%mem,args"

मैं इसे सीएसवी में स्वरूपित करना चाहता हूं ताकि मैं इसे पार्स कर सकूं। ध्यान दें मैंने पार्सिंग को आसान बनाने के लिए अंत में आर्ग लगाए हैं; मुझे नहीं लगता कि ,किसी भी अन्य कॉलम में कोई वसीयत मौजूद है - अगर मैं गलत हूं तो कृपया मुझे सही करें।

मैं व्हाट्सएप कैसे निकालूं?

जवाबों:


10

मैन पेज से:

-o format       user-defined format.
                format is a single argument in the form of a blank-separated or comma-separated list, which offers a
                way to specify individual output columns. The recognized keywords are described in the STANDARD FORMAT
                SPECIFIERS section below. Headers may be renamed (ps -o pid,ruser=RealUser -o comm=Command) as
                desired. If all column headers are empty (ps -o pid= -o comm=) then the header line will not be
                output. Column width will increase as needed for wide headers; this may be used to widen up columns
                such as WCHAN (ps -o pid,wchan=WIDE-WCHAN-COLUMN -o comm). Explicit width control
                (ps opid,wchan:42,cmd) is offered too. The behavior of ps -o pid=X,comm=Y varies with personality;
                output may be one column named "X,comm=Y" or two columns named "X" and "Y". Use multiple -o options
                when in doubt. Use the PS_FORMAT environment variable to specify a default as desired; DefSysV and
                DefBSD are macros that may be used to choose the default UNIX or BSD columns.

इसलिए कोशिश करें:

/bin/ps -o uname:1,ppid:1,pid:1

क्या आप इसे स्वीकृत उत्तर के रूप में चुनना चाहेंगे? @ जेफ-स्कॉलर
— फेलिप अल्वारेज़

5

चूंकि पहले 6 फ़ील्ड में रिक्त वर्ण नहीं होना चाहिए (जब तक कि आप उन्हें उपयोगकर्ता नामों में अनुमति नहीं देते हैं), आप आउटपुट को पोस्ट-प्रोसेस कर सकते हैं:

ps --no-headers -exo "uname,ppid,pid,etime,%cpu,%mem,args" | sed '
  s/[\"]/\\&/g
  s/  */,/;s/  */,/;s/  */,/;s/  */,/;s/  */,/;s/  */,"/
  s/$/"/'

यहाँ आखिरी फ़ील्ड (आर्ग्स) उद्धृत करने के बाद "एस और \एस के साथ बच गए \।

एक आउटपुट का उत्पादन करता है जैसे:

stephane,3641,3702,10-00:20:24,0.1,0.3,"some cmd,and,args... VAR=foo\"bar"

2

आप के sedसाथ उपयोग कर सकते हैं ps। तो आप यहाँ क्या चाहते हैं: -

ps --no-headers -exo "uname,ppid,pid,etime,%cpu,%mem,args" | sed 's/\ /,/g'

लेकिन मुझे आश्चर्य है कि यह उपयोगी होगा, क्योंकि psखुद का आउटपुट बहुत सारे मिल गया है ,।


जैसा कि मैंने उल्लेख किया है, मेरा मानना ​​है कि मैंने केवल एक कॉलम चुना है ,जिसे मैं अंत में डाल सकता हूं, हालांकि, यह समाधान ,उस कॉलम से हटा देगा जो मुझे नहीं चाहिए।
— चीता

आउटपुट को देखें जो उत्पन्न करता है और मुझे बताए यदि आपको लगता है कि यह वांछनीय है :) विशेष रूप से कमांड कॉलम पर ध्यान दें।
— ओली

जैसा होगा वैसा ही होगा tr ' ' ,। आप शायद tr -s ' ' ,यहाँ चाहते हैं।
— स्टीफन चेजलस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.