我有以下的测试脚本这个awk脚本为什么不像预期的那样工作?
/^[^a-zA-Z0-9]/ {
DATEd[$3] = $1
}
END {
print " \"data\": ["
for (i = 0 ; i <= 5; i ++) {
{ print " [" i ", \"" DATEd[i] "\"],"}
}
print " ]"
}
而从这个文本文件阅读
2011-01-22 22:12 P16A22_110114072915 22 1312 75 13.55 1399
2011-01-22 22:12 P16A22_110114072915 22 1312 75 13.55 1399
2011-01-22 22:12 P16A22_110114072915 22 1312 75 13.55 1399
2011-01-22 22:12 P16A22_110114072915 22 1312 75 13.55 1399
2011-01-22 22:12 P16A22_110114072915 22 1312 75 13.55 1399
2011-01-22 22:12 P16A22_110114072915 22 1312 75 13.55 1399
但它不会打印出我希望它,我希望它打印出来
"data": [
[0, "2011-01-22"],
[1, "2011-01-22"],
[2, "2011-01-22"],
[3, "2011-01-22"],
[4, "2011-01-22"],
[5, "2011-01-22"],
]
当实际上只打印出
"data": [
[0, ""],
[1, ""],
[2, ""],
[3, ""],
[4, ""],
[5, ""],
]
那么为什么“DATEd [$ 3] = $ 1”是空的?
另外我该如何检查数组的长度? 在这种情况下,DATEd.length不起作用。
感谢
EDIT_ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ___
所以从@Fredrik的帮助和@geekosaur我与这个地方来,现在一些最后的问题
1)脚本现在看起来是这样
/[a-zA-Z0-9]/ {
DATEd[NR-1] = $1
}
END {
print " \"data\": ["
for (i in DATEd) {
{ print " [" i ", \"" DATEd[i] "\"],"}
}
print " ]"
}
,并给出了下面的输出
"data": [
[4, "2011-01-26"],
[5, "2011-01-27"],
[6, "2011-01-28"],
[0, "2011-01-22"],
[1, "2011-01-23"],
[2, "2011-01-24"],
[3, "2011-01-25"],
]
但我希望它看起来像这样
"data": [
[0, "2011-01-22"],
[1, "2011-01-23"],
[2, "2011-01-24"],
[3, "2011-01-25"],
[4, "2011-01-26"],
[5, "2011-01-27"],
[6, "2011-01-28"]
]
即进行排序,并最终收盘‘]’字符之前删除最后一个“”字符。这可能以简单的方式获得吗?=)
感谢=)
EDIT 3最终Outcome_ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ____
使用@geekosaur和@Fredrik贡献的=)
{
DATEd[NR-1] = $1; len++
}
END {
print " \"data\": ["
#for (i in DATEd) {
for (i = 0 ; i <= len-1; i ++) {
{ print " [" i ", \"" DATEd[i] "\"],"}
}
print " ]"
}
@Fredrik我知道它没有索引到5,只是好奇,看看它是否包含任何东西。但我现在已经修好了,但它仍然不起作用,现在就是这样/ [a-zA-Z0-9] /,而且必须工作? – erik
@erik请参阅@geekosaur的答案,您正在使用第三个字段为您的数组编制索引,即“P16A22_110114072915”是这个意思吗? –
相当有效,还有一个问题,有没有一种方法可能会删除最后一个',',比如检查$ 1的长度,如果它相同,则有一个特殊情况printf“[%d,%s] \ n” ,NR-1,$ 1? =) – erik