Как исправить эту синтаксическую ошибку awk в сценарии оболочки?

Команда

grep -nr `echo "FLAG" | base64`

указывает на рекурсивный поиск во всех файлах в текущем каталоге шаблона, возвращаемого командой echo "FLAG" | base64.

Вместо этого, я думаю, вы хотите

echo "FLAG" | base64 | grep -n 'Rkx'

или, если по какой-либо причине вам нужна подстановка команды:

grep -n 'Rkx' <<< $(echo "FLAG" | base64)

Обратите внимание, что выражение $()используется вместо обратных кавычек для подстановки команд. Вот почему.

0
25.03.2021, 17:57
1 ответ

Проблема заключается в строке#!-вашего скрипта. Он должен читаться как #!/bin/sh, так как это сценарий оболочки, а не awk.

На самом деле здесь происходит то, что оболочка с вашей ошибочной строкой#!-выполнит

/bin/awk./Colavg.sh

Это означает использование текстовой строки ./Colavg.shв качестве программы awk. Для программы awkэто не имеет смысла, и ваш интерпретатор awkидентифицирует две отдельные ошибки, прежде чем принять решение об отказе.


Скрипт можно упростить:

#!/bin/sh

name=County029-CO-0023-T0000JD

awk -F, '
    $4 == -999 { c999++  }
    NF == 4    { count++ } 
    END { printf "missing: %d\n", c999  }
    END { printf "missing: %d\n", count }' "$name.out" >>"$name-avg.out"

Измените >>в конце на >, если вы хотите, чтобы выходной файл был усечен (и очищен )перед записью в него результатов.

2
28.04.2021, 22:57

Теги

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