безудержная ошибка регулярного выражения в awk

У меня есть сценарий, который преобразовывает выражения в различных единицах к стандартным единицам как: distance=1km-> distance=1000m.

Это - мой код:

#!/bin/bash
cat "$1" | grep '=' | awk -F= '{switch ($2) {
                    case  /^[0-9]+s$/ : print $1"="$2*1;
                    break;
                    case /^[0-9]+min$/ : print $1"="$2*60;
                    break; 
                    case /^[0-9]+h$/ : print $1"="$2*3600;
                    break;
                    case /^[0-9]+d$/ : print $1"="$2*3600*24;
                    break;
                    case /^[0-9]+mm$/ : print $1"="$2/1000;
                    break;
                    case /^[0-9]+sm$/ : print $1"="$2/100;
                    break;
                    case /^[0-9]+dm$/ : print $1"="$2/10;
                    break;
                    case /^[0-9]+m$/ : print $1"="$2*1;
                    break;
                    case /^[0-9]+km$/ : print $1"="$2*1000;
                    break;
                    case /^[0-9]+mg$/ : print $1"="$2/1000000;
                    break;
                    case /^[0-9]+g$/ : print $1"="$2/1000;
                    break;
                    case /^[0-9]+kg$/ : print $1"="$2*1;
                    break;
                    case /^[0-9]+t$/ : print $1"="$2*1000;
                    break; }
                }'
fi 

Но когда я пытаюсь выполнить его, у меня есть две ошибки:

awk: line 1: syntax error at or near {
awk: line 2: runaway regular expression / : print $ ...
0
задан 4 December 2018 в 03:19

1 ответ

Я почти уверен, что ошибка состоит в том, потому что Ваша система настроена для использования mawk (который в настоящее время, кажется, не поддерживает switch ... case создайте) как реализация по умолчанию awk - вместо gawk (GNU Awk):

$ sudo update-alternatives --set awk /usr/bin/mawk
update-alternatives: using /usr/bin/mawk to provide /usr/bin/awk (awk) in manual mode
$ 
$ echo 'abc:123' | awk -F: '{switch($2) {case /^[0-9]+$/: print $1; break;}}'
awk: line 1: syntax error at or near {
awk: line 1: runaway regular expression /: print $1 ...

тогда как с GNU awk

$ sudo update-alternatives --set awk /usr/bin/gawk
update-alternatives: using /usr/bin/gawk to provide /usr/bin/awk (awk) in manual mode
$ 
$ echo 'abc:123' | awk -F: '{switch($2) {case /^[0-9]+$/: print $1; break;}}'
abc
0
ответ дан 27 October 2019 в 00:34

Другие вопросы по тегам:

Похожие вопросы: