Смотреть с помощью команды awk

Смотреть с помощью команды awk

Как вы смотрите такую ​​команду?

awk 'NR%2==0 {printf "%s %8.0f", $1, $5}' filename.txt

Если поставить перед этим «watch», то получится следующая ошибка:

awk: cmd. line:1: fatal: cannot open file `{printf' for reading (No such file or directory)

Ответ на:Использование команды watch с аргументом, содержащим кавычкибыло экранировать знаки $, заменив их на \$. Но это приводит к ошибке:

sh: -c: line 0: syntax error near unexpected token `('
                                                      sh: -c: line 0: 

Я хотел задать этот вопрос в комментарии к тому вопросу, но не хватило очков, чтобы сделать комментарий.

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

1)https://askubuntu.com/questions/500217/how-to-rightly-quote-piped-command-for-watch(ответ снова был - экранировать знак $).
2), 3) и 4) перечислены в комментариях, так как я не могу публиковать более 2 ссылок без 10 очков репутации.

решение1

Существует четыре подхода.

1. Поместите команду в двойные кавычки.

Необходимо экранировать как двойные кавычки, так и знаки доллара:

watch "awk 'NR%2==0 {printf \"%s %8.0f\", \$1, \$5}'" filename.txt

2. Поместите команду в одинарные кавычки.

Внутри одинарных кавычек ни ни "не $нужно экранировать. Однако невозможно включить одинарные кавычки в строку, заключенную в одинарные кавычки. Если нам нужно, чтобы появилась одинарная кавычка, обходной путь — закончить строку, заключенную в одинарные кавычки, и добавить экранированную одинарную кавычку, \'. Выглядит это так:

watch 'awk '\''NR%2==0 {printf "%s %8.0f", $1, $5}'\' filename.txt

3. Гибридный подход

Объединяя оба варианта выше, мы заключаем первую часть строки в двойные кавычки, а вторую часть — в одинарные:

watch "awk 'NR%2==0 {printf "'"%s %8.0f", $1, $5}'\' filename.txt

4. Не цитируется, но полностью экранируется

Если мы не заключим команду в кавычки, нам придется экранировать все необходимые символы shell-active. Это включает пробелы, кавычки, фигурные скобки и знаки доллара:

watch awk\ \'NR%2==0 \{printf\ \"%s\ %8.0f\",\ \$1,\ \$5\}\' filename.txt

решение2

Это старая тема, но эта проблема никогда не исчезнет. Вот она, экранируйте символы awk ', $ и %:

$ watch -d -n 10 'ls -ltr | grep exec_setsid_ | grep out | tail -1 | awk '\'{ print \$9 }\'' | xargs tail -25'

Эта команда покажет последние 25 строк нового файла «exec_sedsid_*.out», который был создан в текущей папке!

Скорее!

Связанный контент