PythonでCLIコマンドを使用して、ps -au | awk '{print$1,$2,$3,$4,$7,$11}' | sed '1d'
次の出力を取得します。
root 669 0.0 0.0 tty1 /sbin/agetty
root 670 0.4 2.8 tty7 /usr/lib/xorg/Xorg
lothar 1573 0.0 0.0 pts/0 sh
lothar 1599 0.0 0.0 pts/0 /bin/bash
lothar 21130 0.0 0.1 pts/1 /usr/bin/bash
lothar 21140 0.0 0.1 pts/2 /usr/bin/bash
lothar 21146 0.0 0.1 pts/3 /usr/bin/bash
lothar 21230 0.0 0.1 pts/4 /usr/bin/bash
lothar 508386 0.0 0.0 pts/0 ps
lothar 508387 0.0 0.0 pts/0 [awk]
lothar 508388 0.0 0.0 pts/0 sed
ただし、このコマンドセットは追加の\n
文字を挿入します。 Linux cliでtrを使用してすべて削除できることを知っていますが、\n
最後の項目だけを削除するだけです。
これを行う最良の方法は何ですか?
ありがとうございます!
答え1
これらの問題を解決する簡単なツールがあります。
truncate -s -1
しかし、最初に末尾の改行があることを確認することをお勧めします。
[ -z "$(tail -c1 file)" ] && truncate -s -1
答え2
最後の改行文字を印刷しないように awk に指示できます。 printfに変換すると、最初の文字列を除いて文字列の前に改行のみが印刷されます。
ps -au | awk '{if (NR > 1) { print "" }; printf("%s %s %s %s %s %s", $1,$2,$3,$4,$7,$11); }'
答え3
Bashにはこれを行う方法がたくさんあります。たとえば、次のコマンドをパイプします。
head -c-1
出力から最後のバイトを削除します。
答え4
この「トリック」ソリューションが今私が考えることができるすべてです。次の改行なしで何かをエコーするので動作します。この場合、その内容はpsの出力です。
echo -n "$(ps -au | awk '{print$1,$2,$3,$4,$7,$11}' | sed 1d |tail -n3)NONEWLINE"
出力:
balmora: ~/src/github.com/systemd/systemd
$ echo -n "$(ps -au | awk '{print$1,$2,$3,$4,$7,$11}' | sed 1d |tail -n3)NONEWLINE"
jaroslav 821201 0.0 0.0 pts/9 awk
jaroslav 821202 0.0 0.0 pts/9 sed
jaroslav 821203 0.0 0.0 pts/9 tailNONEWLINEbalmora: ~/src/github.com/systemd/systemd [main]