首页 > 解决方案 > awk/gawk 数组连接成字符串失败

问题描述

我想在 gawk 中将一个数组连接成一个字符串,
让数组a [ABC, DEF, GHI]
并想要一个像“ABC DEF GHI”这样的字符串

在这里,为了演示目的,我使用“echo”简化了管道馈送:

  • 测试...工作正常(没有连接,只有输出)

    @(回声 ABC & 回声 DEF & 回声 GHI) | gawk '{a[$0]++} END { for( f in a ) print f; }'

  • 现在尝试连接

    @(回声 ABC & 回声 DEF & 回声 GHI) | gawk '{a[$0]++} END { for( f in a ) b=(bf); 打印 b; }'

只返回数组'a'中的第一个字符串......
关于如何做到这一点的任何想法......

标签: awk

解决方案


如果您尝试打印 Unix shell 数组的连接值,例如由以下人员创建:

$ a=(ABC DEF GHI)

然后做:

$ echo "${a[*]}"
ABC DEF GHI

如果您想连接多个输入行,如下所示:

$ printf '%s\n' "${a[@]}"
ABC
DEF
GHI

由于某种原因,使用 awk 有几个选项,包括:

$ printf '%s\n' "${a[@]}" | awk '{printf "%s%s", (NR>1 ? OFS : ""), $0} END{print ""}'
ABC DEF GHI

$ printf '%s\n' "${a[@]}" | awk '{b=(NR>1 ? b OFS : "") $0} END{print b}'
ABC DEF GHI

$ printf '%s\n' "${a[@]}" | awk '{a[NR]=$0} END{for (i=1; i<=NR; i++) b=(i>1 ? b OFS : "") a[i]; print b}'
ABC DEF GHI

$ printf '%s\n' "${a[@]}" | awk '{a[NR]=$0} END{for (i=1; i<=NR; i++) printf "%s%s", (i>1 ? OFS : ""), a[i]; print ""}'
ABC DEF GHI

如果这些都不是您想要做的,那么请编辑您的问题以阐明您的要求。


推荐阅读