我只想显示命令中所有记录的特定列。
示例:docker ps
在10列中显示数据。它可以在列标题之间留出空间。我的要求是只按一定顺序得到2-4列。
在任何以表格方式响应的命令中,是否有直接的方法来做到这一点?
我对Linux很陌生,我想这是否可行。谢谢。
例如:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED NAMES
123 image "ABC DEF" 10 hours ago image ABC
在上面的场景中,CONTAINER ID
是一个标头列,但是有空间,在NAMES
列的行中可以在两者之间留出空间。
使用AWK
、CUT
等命令为所有命令编写通用脚本比较困难,因为它们使用的是“空间”逻辑。
发布于 2018-12-22 14:54:16
您可以这样使用awk
:
$ ps | awk '{print $2 " " $3 " " $4}'
TTY TIME CMD
pts/22 00:00:00 bash
pts/22 00:00:00 ps
pts/22 00:00:00 awk
或与column -t
一起获得更可读的输出:
$ ps | awk '{print $2 " " $3 " " $4}' | column -t
TTY TIME CMD
pts/22 00:00:00 bash
pts/22 00:00:00 ps
pts/22 00:00:00 awk
pts/22 00:00:00 column
正如William Pursell在下面的注释中所指出的,可以简化awk
命令:
$ ps | awk '{print $2, $3, $4}' | column -t
TTY TIME CMD
pts/9 00:00:00 bash
pts/9 00:00:00 ps
pts/9 00:00:00 awk
pts/9 00:00:00 column
发布于 2018-12-22 16:52:47
将输出传输到tr和cut
docker ps | tr -s " " | cut -d " " -f 2-4
-s标志在tr上压缩字符,只留下一个“”。
-d on cut告诉拆分字段为“”。
发布于 2018-12-22 16:46:03
使用Perl的示例输出。Perl有基于0的索引,所以您必须使用1..3,意思是从2到4
$ ps
PID PPID PGID WINPID TTY UID STIME COMMAND
14556 11424 14556 6944 cons0 197609 22:10:27 /usr/bin/ps
11424 1 11424 11424 cons0 197609 22:41:21 /usr/bin/bash
$ ps | perl -F'\s+' -lane ' print "@F[1..3]" '
PID PPID PGID
11208 11424 11208
11424 1 11424
380 11424 11208
如果你不需要标题..。然后
$ ps | perl -F'\s+' -lane 'if($.>1) { print "@F[1..3]" } '
6072 11424 6072
11424 1 11424
https://stackoverflow.com/questions/53896648
复制相似问题