Смотреть с командой 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-properly-quote-piped-command-for-watch (ответ был снова, чтобы избежать знака $).
2), 3) и 4) перечислены в комментариях, так как я не могу публиковать более 2 ссылок без репутации 10 баллов.

2 ответа

Есть четыре подхода.

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. Без кавычек, но полностью сбежал

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

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

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

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

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

Быстро!

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