以逗号分隔的数组条目中的 "invisible" FS

The "invisible" FS in a comma delimited array entry

假设我有:

awk 'BEGIN{
         c["1","2","3"]=1 
         c["12","3"]=2 
         c["123"]=3          # fleeting...
         c["1","23"]=4 
         c["1" "2" "3"]=5    # will replace c["123"] above...
         for (x in c) {
            print length(x), x, c[x]
            split(x, d, "")      # is there something that would split c["12", "3"] into "12, 3"?
                                 # better: some awk / gawkism in one step?
            for (i=1; i <= length(x); i++)
               printf("|%s|", d[i])
            print "\n"
            }
        }'

打印:

4 123 4
|1||||2||3|

3 123 5
|1||2||3|

4 123 2
|1||2||||3|

5 123 1
|1||||2||||3|

在每种情况下,在形成数组条目时使用 , 在终端中打印时会产生视觉上相似的结果 (123),但哈希值不同。打印时丢失的元素之间似乎有一个 'invisible' 分隔符(即,分隔符使 c["12", "3"] 散列与 c["123"] 不同)

我将在 split 中使用什么值来确定创建数组索引时逗号在字符串中的位置?即,如果我用 c["12","3"] 创建了一个数组条目,那么打印 "12","3""123" 的最简单方法是作为视觉上明显不同于 c["123"] 的字符串(在终端中)?

(我知道我可以在创建数组条目时执行 c["12" "," "3"]。但是是什么让 c["12","3"] 散列与 c["123"] 不同,以及如何打印它们以便它们在航站楼...)

c["12","3"] = c["12" SUBSEP "3"]

请参阅 awk 手册页中的 SUBSEP。如果您有 CSV 文件并且想写 c["12","3"] 而不是 c["12" FS "3"] 并在数组索引中打印逗号作为分隔符,则可以在 BEGIN 部​​分设置 SUBSEP=FS