Почему awk не выводит никаких значений?

В основном,должен быть языковой интерфейс и все необходимые вспомогательные библиотеки, лицензированные соответствующим образом, с достаточно качественным (кодом, а также документация и тесты ), с людьми, желающими их поддерживать. Принимают решения руководящий комитет GCC .

Есть примеры добавления и удаления языков в не -слишком -далеком прошлом. D стал кандидатом в 2011 году , был утвержден в 2017 году и доступен в GCC 8. С другой стороны, Java была удалена в GCC 7 после долгого бездействия.

Есть проекты по добавлению Python и Rust , но я не думаю, что там много активности.

GCC разделяется на несколько компонентов ; различные языки, которые он поддерживает, реализованы внешними интерфейсами, которые преобразуют программы в промежуточное представление, GIMPLE (, который не зависит от языка -и машины -). Таким образом, оптимизаторы являются общими для разных языков.

3
18.06.2020, 20:45
3 ответа

В вашем сценарии awkпечать запускается как действие по умолчанию, которое, в свою очередь, зависит от «побочного -эффекта» оценки назначения $1=$1как шаблона.

В первом случае перед первым разделителем есть пустое поле, поэтому $1— это пустая строка, которая оценивает ЛОЖЬ. Во втором случае $1— это не -пустая строка a, которая оценивается как ИСТИНА, запуская действие печати по умолчанию.

8
18.03.2021, 23:26

Вы полагаетесь на истинное значение первого поля, чтобы заставить awk напечатать запись. Значение истинности пустой строки равно false, поэтому awk не делает ничего, кроме присваивания. Выведите явно (или используя какое-либо другое всегда истинное условие, например 1), вместо использования первого поля в качестве проверки:

echo ":a:b:c:" | awk '{$1=$1; print}' FS=":" OFS="$"
5
18.03.2021, 23:26
  1. Не позволяйте результату действия оцениваться как условие, если только у вас нет особой потребности (, например.вы пытаетесь удалить символ, если он присутствует, и хотите что-то сделать, если это удастся ).
  2. Код становится более читаемым, если вы видите, что переменные устанавливаются до того, как вы увидите код, который их использует, поэтому не перечисляйте назначения переменных в списке файлов после script, если у вас нет особых потребностей (, например. изменение значений между файлами ), укажите их заранее, используя -vили BEGINили назначение перед вызовом awk, к которому вы можете получить доступ изENVIRON[](см.https://stackoverflow.com/q/19075671/1745001).
  3. Используйте одинарные кавычки для всех строк (, включая скрипты )в оболочке. если у вас нет особой необходимости использовать двойные кавычки или нет кавычки (см.https://mywiki.wooledge.org/Quotes).

Итак, ваш скрипт должен быть awk -F':' -v OFS='$' '{$1=$1}1'.

4
18.03.2021, 23:26

Теги

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