从awk输出中,如何剪切或修剪列中的字符

时间:2018-12-12 20:42:18

标签: bash awk cut

此刻

我想修剪.fmbi1a5nn9sp5o4qy3eyazeq5.eddvrl9sa8t448pb38vibj8ef:.ilwio0k43fgqt4jqzyfadx19v:,以便输出占用更少的空间:)

第一步:

docker ps --format "{{.Names}}: {{.Status}}" | sort -k1 | column -t

mon_node-exporter.fmbi1a5nn9sp5o4qy3eyazeq5.eddvrl9sa8t448pb38vibj8ef:     Up  7      days
mon_prometheus.1.ilwio0k43fgqt4jqzyfadx19v:                                Up  7      days

我知道

我可以做类似的事情:

docker ps --format "{{.Names}}: {{.Status}}" | sort -k1 | rev | cut -d"." -f2- | rev

mon_node-exporter.fmbi1a5nn9sp5o4qy3eyazeq5
mon_prometheus.1

问题

是我输了其他列:-/

想法

这样做(用awk)听起来很合逻辑,但是不起作用。有什么想法吗?

docker ps --format "{{.Names}} : {{.Status}}" | sort -k1 | awk '{(print $1 | rev | cut -d"." -f2- | rev),$2,$3,$4,$5,$6}' | column -t 

先谢谢您! P

2 个答案:

答案 0 :(得分:0)

剪切最后一个点扩展名

$ docker ... | sort | awk '{sub(/\.[^.]*$/,"",$1)}1' file | column -t

mon_node-exporter.fmbi1a5nn9sp5o4qy3eyazeq5  Up  7  days
mon_prometheus.1                             Up  7  days

或者删除点后长度超过20个字符的任何内容。

$ ... | sed -e 's/\(\.[a-z0-9:]\{20,\}\)* / /' | column -t

mon_node-exporter  Up  7  days
mon_prometheus.1   Up  7  days

答案 1 :(得分:0)

行!这个技巧将使我的生活变得更加轻松。

(我已删除文件)

x1=5
xprint(1

问题2 : 现在您将如何在第一个点之后剪切字符?

干杯!