2

例えば、

入力するとbashで次のps -wefようになります:

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 20:06 ?        00:00:01 /sbin/init
root         2     0  0 20:06 ?        00:00:00 [kthreadd]
root         3     2  0 20:06 ?        00:00:00 [ksoftirqd/0]
root         6     2  0 20:06 ?        00:00:00 [migration/0]
root         7     2  0 20:06 ?        00:00:02 [watchdog/0]
root         8     2  0 20:06 ?        00:00:00 [cpuset]
root         9     2  0 20:06 ?        00:00:00 [khelper]
root        10     2  0 20:06 ?        00:00:00 [kdevtmpfs]
root        11     2  0 20:06 ?        00:00:00 [netns]
root        12     2  0 20:06 ?        00:00:00 [sync_supers]
root        13     2  0 20:06 ?        00:00:00 [bdi-default]
root        14     2  0 20:06 ?        00:00:00 [kintegrityd]
root        15     2  0 20:06 ?        00:00:00 [kblockd]
root        16     2  0 20:06 ?        00:00:00 [ata_sff]
root        17     2  0 20:06 ?        00:00:00 [khubd]
root        18     2  0 20:06 ?        00:00:00 [md]
root        21     2  0 20:06 ?        00:00:00 [khungtaskd]

そして、保持したい列を知っています。たとえば、PID列である2番目の列を保持したい場合、最終結果は次のようになります。

1 2 3 6 7 8 9 10 11 12 13 14 15 16 17 18 21

ps の元の結果の最初の行が削除されます。

sed または awk を使用して最終結果を取得するにはどうすればよいですか?

ありがとうございました。

4

3 に答える 3

4
 ps -wef | awk 'NR>1 {printf("%s ", $2)}END{printf("\n")'

これがお役に立てば幸いです。

于 2012-06-09T02:41:09.807 に答える
3

オプションを使用-oして、最初に PID 列のみを取得することもできます。

ps --no-headers -eo pid

出力への貢献を捨てているように見えるので、 を削除し、 でヘッダーを削除しまし-wた。-f--no-headers

于 2012-06-09T04:29:42.433 に答える
1

これはうまくいくかもしれません(GNU sed):

sed '1d;s/\S*\s*\(\S*\).*/\1/' file

より柔軟なアプローチ:

sed '1d;s/\(\(\S*\)\s*\)\{2\}.*/\2/' file

TIMEしたがって、列が必要な場合:

sed '1d;s/\(\(\S*\)\s*\)\{7\}.*/\2/' file
于 2012-06-09T07:05:36.283 に答える