Почему awk печатает всю строку вместо первого поля? - программирование
Подтвердить что ты не робот

Почему awk печатает всю строку вместо первого поля?

Я пытаюсь научиться использовать awk, но он не ведет себя так, как я ожидаю. Вот моя проблема:

$ echo "Hello brave new world" | awk "{print $1}"
Hello brave new world

Я ожидал увидеть "Привет", так как это первое поле. Почему пробелы не считаются разделителями полей?

4b9b3361

Ответ 1

Это потому, что Bash интерпретирует $1 как ссылающийся на первый аргумент оболочки, поэтому он заменяет его своим значением. Так как в вашем случае этот параметр не установлен, $1 просто заменяется пустой строкой; поэтому ваша программа AWK на самом деле просто {print }, которая печатает всю строку.

Чтобы предотвратить выполнение Bash, оберните вашу программу AWK в одиночные кавычки вместо двойных кавычек:

echo "Hello brave new world" | awk '{print $1}'

или

echo 'Hello brave new world' | awk '{print $1}'

Ответ 2

 echo "Hello brave new world" | awk '{print $1}'

Используйте одинарные кавычки вокруг awk-программы, иначе $1 переводится как переменная оболочки $1