我有这个命令:
echo "29601 sc 20 0 608372 63680 46268 S 90.9 0.0 4168:30 vcs1" \
|awk '{time_=$(NF-1); gsub(/:.*/, "", time_); a[time_] = $0} END {for (i in a) { if(i < 50) {print i, "--------" ,a[i]}}}'
那么它的输出是:
4168 -------- 29601 sc 20 0 608372 63680 46268 S 90.9 0.0 4168:30 vcs1
我在该命令中的某些地方是否写错了?为什么
i=4168
小于 50
。
我希望当我输入 i > 50
时,命令输出将返回,而不是 i < 50
gawk
“有效”,因为它不符合自己的规范:
$12 [vcs1] string
$11 [4168:30] string
$10 [0.0] strnum
$9 [90.9] strnum
$8 [S] string
$7 [46268] strnum
$6 [63680] strnum
$5 [608372] strnum
$4 [0] strnum
$3 [20] strnum
$2 [sc] string
$1 [29601] strnum
4168:30 string 1
4168 string string 29601 sc 20 0 608372 63680 46268 S 90.9 0.0 4168:30 vcs1
4168 string
4168 -------- 29601 sc 20 0 608372 63680 46268 S 90.9 0.0 4168:30 vcs1
数组索引
4168
始终是 string
类型 - 当它作为字段进入时,在 gsub()
之后,并制成数组索引。
gawk
自己的手册明确指出这种比较应该是字符串比较:
+----------------------------------------------
| STRING NUMERIC STRNUM
--------+----------------------------------------------
|
STRING | string [[ string ]] string
|
NUMERIC | [[ string ]] numeric numeric
|
STRNUM | string numeric numeric
--------+----------------------------------------------
[https://www.gnu.org/software/gawk/manual/html_node/Variable-Typing.html][1]