使用awk -F的可变返回值0

时间:2019-01-24 14:22:40

标签: awk

我正在尝试收集特定日期的每小时数据,并使用awk -F。使用特定值可以正常工作,但是我在awk中使用了一个变量,它的值变为0。

有人可以帮助我查找代码问题吗?

#!/usr/bin/ksh
set -x
cd /dest_directory
for i in {00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23}
do
A=`awk -v var="$i" -F"," '$1=="203" && $3=="7003" && substr{$6,7,2}==var {print $0}' 190116* | wc -l`

echo "$i, $A"
done 

收到打印输出:

awk -F, -v var={00 $1=="203" && $3=="7003" && substr{$6,7,2}==var {print $0} 19011600010204.TLG
awk: cmd. line:1: $1=="203" && $3=="7003" && substr{$6,7,2}==var {print $0}
awk: cmd. line:1:                                  ^ syntax error
awk: cmd. line:1: $1=="203" && $3=="7003" && substr{$6,7,2}==var {print $0}
awk: cmd. line:1:                                     ^ syntax error
awk: cmd. line:1: $1=="203" && $3=="7003" && substr{$6,7,2}==var {print $0}
awk: cmd. line:1:                                          ^ syntax error
+ MCN=0
+ echo {00, 0
{00, 0

2 个答案:

答案 0 :(得分:1)

awk比您在脚本中功劳更大

$ awk -F, 'BEGIN{n=split("00 01 02 ... 22 23",keys," ");
           $1==203 && $3==7003 {counts[substr($6,7,2)]++}
           END {for(i=1;i<=n;i++) print keys[i], counts[keys[i]]}' files...

当然,如果您要查找的数字都是全数字,则可以更轻松地实现数字范围。

这将只扫描一次文件,而不是脚本中的24次。

答案 1 :(得分:0)

尝试从<dependencies> <dependency> <groupId>org.mule.connectors</groupId> <artifactId>mule-http-connector</artifactId> <version>1.3.2</version> <classifier>mule-plugin</classifier> </dependency> <dependency> <groupId>org.mule.connectors</groupId> <artifactId>mule-sockets-connector</artifactId> <version>1.1.2</version> <classifier>mule-plugin</classifier> </dependency> <dependencies> 更改为substr{$6,7,2},然后告诉我们。由于substr($6,7,2)的语法为substr,因此我们需要删除substr(variable/current line,start_index,end_index)并将{放入您的代码中。