Arrays 如何使用awk测试数组中的值 my-script.awk 跑 问题:

Arrays 如何使用awk测试数组中的值 my-script.awk 跑 问题:,arrays,awk,Arrays,Awk,为什么我看不到内部的打印?awk存储阵列的方式与您期望的不同。它是一个键/值对,键(fromsplit()是从0开始的整数索引,值是split()将其放入该元素的字符串 条件中的awk测试键,而不是值。因此,边界中的“U+4E00”条件不会通过。相反,您需要迭代数组并查找值 for (boundary in boundaries) { if(boundaries[boundary] == "U+4E00") { print "inside" } 或者,您可以基于现有数组创建一个新数组,但将值存

为什么我看不到
内部的
打印?

awk存储阵列的方式与您期望的不同。它是一个键/值对,键(from
split()
是从0开始的整数索引,值是
split()
将其放入该元素的字符串

条件中的
awk
测试键,而不是值。因此,边界中的
“U+4E00”条件不会通过。相反,您需要迭代数组并查找值

for (boundary in boundaries) { if(boundaries[boundary] == "U+4E00") { print "inside" }
或者,您可以基于现有数组创建一个新数组,但将值存储为键,以便
中的
操作符将按原样工作

for (i in boundaries) {boundaries2[boundaries[i]] = ""}
if ("U+4E00" in boundaries2){print "inside"}
第二种方法有点麻烦,因为您的所有元素值都设置为
,但如果您要在大型文件中迭代,并且只想使用
in
操作符来测试数组中是否有字段(而不是在每个记录上迭代数组,这可能会更昂贵),则该方法非常有用

for (boundary in boundaries) { if(boundaries[boundary] == "U+4E00") { print "inside" }
for (i in boundaries) {boundaries2[boundaries[i]] = ""}
if ("U+4E00" in boundaries2){print "inside"}