显示命令的特定列

sta*_*nny 7 unix linux bash shell command-line

我只想显示命令中所有记录的特定列。

示例:docker ps显示 10 列中的数据。列标题之间可以有空格。我的要求是以某种顺序只获得 2-4 列。

在任何以表格方式响应的命令中是否有直接的方法来做到这一点?

我是 Linux 新手,正在考虑这是否可行。谢谢。


例如:

$ docker ps
CONTAINER ID  IMAGE   COMMAND     CREATED             NAMES
123           image   "ABC DEF"   10 hours ago        image ABC
Run Code Online (Sandbox Code Playgroud)

在上面的场景中,CONTAINER ID是一个标题列但有空间,并且在NAMES列的行中可以有空间。

使用AWK, CUTetc 为所有命令编写通用脚本比较棘手,因为它们适用于“空间”逻辑。

Ark*_*zyk 7

你可以这样使用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
Run Code Online (Sandbox Code Playgroud)

或者与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
Run Code Online (Sandbox Code Playgroud)

正如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
Run Code Online (Sandbox Code Playgroud)


Gon*_*heu 7

将输出传送到trcut

docker ps | tr -s " " | cut -d " " -f 2-4
Run Code Online (Sandbox Code Playgroud)

tr上的-s标志压缩字符并只留下一个“”

-d on cut 告诉用“”分割字段。

  • Docker 实际上有一个过滤器 docker ps --format "table {{.ID}}\t{{.Names}}" 将 ID 或名称替换为您想要的任何列 (7认同)