gawk 中的字符串连接产生意外结果

String concatenation in gawk produces an unexpected result

我正在尝试用 awk 编写一个简单的脚本,但我得到了奇怪的结果并且不明白为什么。在手册或网络中找不到任何线索:

这是输入文件:

# Keyspace
db0:keys=14,expires=4,avg_ttl=454226332

这是命令

gawk -F : '/^db/ { split(, keys, ","); for(i in keys) { k = gensub("=", ":", "g", keys[i]); print ("redis."  "." k "Z")} }'

结果如下:

redis.db0.keys:14Z
redis.db0.expires:4Z
Zedis.db0.avg_ttl:454226332

为什么最后一行的末尾没有 "Z"?不管我使用 gawk 还是 awk (Mac).

预期结果为:

redis.db0.keys:14Z
redis.db0.expires:4Z
redis.db0.avg_ttl:454226332Z

您的输入文件在每一行的末尾都有一个 control-M,使用 cat -v 查看它并使用 dos2unix 或类似的方法删除它们。

到目前为止,这一定是我们收到的最常见的问题....希望我们可以对问题提出一些 "run cat -v file and look for ^Ms before posting" 要求!