Использование awk -F с возвращаемым значением переменной 0 - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь собирать почасовые данные за определенную дату и использую 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 голосов
/ 24 января 2019

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 раза, как в вашем скрипте.

0 голосов
/ 24 января 2019

Попробуйте изменить значение с substr{$6,7,2} на substr($6,7,2) и сообщите нам об этом.Поскольку синтаксис substr равен substr(variable/current line,start_index,end_index), поэтому нам нужно удалить { и поместить ( в ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...