Я хочу создать строку условного выражения и передать в awk сценарии. Мой сценарий как ниже...
comm="\$3 == "hello""
awk -F "^T" -v command="${comm}" '
{
if ( command )
{
print "hye"
}
if ( $3 == "hello" )
{
print "bye"
}
}' test
Но оператор, "если (команда)" всегда оценивает к истинному, который не корректен. Я хочу знать корректный способ выполнить этот оператор..
На выполнении...
./test_awk.sh
Это возвращается
hye
Который не является ожидаемым ответом.
Тестовый файл имеет следующее (просто образец):
hello^Thye^Tbye
Заранее большое спасибо
Если логическая операция всегда является тем же (т.е. в этом случае ==
), и Вы просто хотите изменить полевое число и значение, против которого это тестируется, то можно передать их как отдельные переменные, например,
#!/bin/bash
awk -v field=3 -v value="hello" '
{
if ( $field == value )
{
print "hye"
}
if ( $3 == "hello" )
{
print "bye"
}
}' test
, Если Вы действительно хотите создать переменную awk сценарий, то, по моему скромному мнению, другой подход требуется, например, с помощью здесь документ для записи awk сценария на лету с помощью оболочки для расширения переменной команды - что-то как
#!/bin/bash
mycommand="\$3 == \"hello\""
awk -f- test << EOF
{
if ( ${mycommand} )
{
print "hye"
}
if ( \$3 == "hello" )
{
print "bye"
}
}
EOF
$ cat test
hello^Thye^Tbye
$ awk '{ print ($3 == hello) ? "true" : "false" }' test
true # wrong output
$ awk '{ print ($3 == "hello") ? "true" : "false" }' test
false # correct output
согласно трассировке, когда мы используем $3 == hello
мы получаем неправильный вывод и при изменении на $3 == "hello"
включая с двойной кавычкой вокруг строки вывод корректен.
Таким образом, мы нашли неправильный оператор, и проблема идет comm
значение переменной, если Вы устанавливаете:
$ comm="\$3 == "hello""
и возьмите эхо:
$ echo $comm
Вы будете видеть, что переменная коммуникации имеет ниже значения в ней
$3 == hello
таким образом, Вам нужна двойная кавычка вокруг значения, затем редактируют Ваше значение с этим:
$ comm="\$3 == \"hello\""
$ echo $comm
$3 == "hello"
затем пойдите и улучшите Ваш.надеюсь, это поможет.