我正在尝试收集特定日期的每小时数据,并使用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
答案 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)
并将{
放入您的代码中。