仅使用awk从csh中以某些字符串开头的行中的列中获取唯一值

时间:2018-05-17 19:14:30

标签: awk csh

我正在尝试从此Influxdb查询中获取主机列表:

$ influx -database "collectd" -execute "SHOW TAG VALUES WITH KEY=host"

输出类似于:

name: system
key   value
------------
host  foo.tld
host  bar.tld

name: mem
key   value
------------
host  foo.tld
host  bar.tld

...

目前,我正在使用这样的awk

$ db-query | awk '/^host/ && !a[$2]++ { print $2 }'

这在使用shell sh时有效,并且仅返回唯一主机列表,例如:

foo.tld
bar.tld

但是当使用csh shell时,我收到此错误:

a[: Event not found.

知道如何在shcsh shell中实现此功能吗?

1 个答案:

答案 0 :(得分:1)

尝试转义任何/所有!字符,例如\!

csh! char解释为命令历史记录中的事件。

最常见的"事件"使用的是!!(上一行)和!$(上一行的最后一个字),但还有一百万。

我很惊讶你得到了这个错误消息,因为我认为csh尊重单引号。(但显然不是;-))。

IHTH