Если пишу watch -n1 -t tail /var/access.log все работает
Если пишу tail /var/access.log | awk '{print $1}' тоже все работает
но если пишу как в первой строке, то не работает.
Вы делаете в корне неправильно в данном конкретном случае. В случае tail, это делается так: tail -f /var/access.log | awk '{print $1}'
Ответ выше, для случая с watch, правильный, но читаемость его оставляет желать лучшего. Лучше так:
Анатолий, для сложных случаев можно использовать printf, например '{printf "[ %s ] %s",$1,$2}'
да и правильнее для логов наверное будет использовать не -f ( по умолчанию следит за дескриптором файла), а --follow=filename что будет следить за файлом через его имя, то есть при его удалении/переименовании например access.log в access1.log обчный -f перестанет работать, вернее он будет смотреть на access1.log который станет как бы историей а актуальный access.log уже не будет отрабатывать пока не перезапустить команду tail
xolst9, возможно, но все равно в данном случае "правильно" не равно "верно"!
Вопрос был, что делать, если одинарные и двойные кавычки заняты. А Вы не дали на это ответ!
Анатолий, так я и не отвечал на ваш глобальный вопрос, для этого я бы его отдельно написал
это рекомендации для вывода вашего print-a когда с помощью него нужно выводить относительно сложное форматирование
а про -f и --follow=filename это дополнение/уточнение для ответа Вадима