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 列,最终结果将是:

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 回答