以逗号分隔的数组条目中的 "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
。
假设我有:
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
。