Почему awk печатает всю строку вместо первого поля? - PullRequest
16 голосов
/ 18 февраля 2012

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

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

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

Ответы [ 2 ]

26 голосов
/ 18 февраля 2012

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

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

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

или

echo 'Hello brave new world' | awk '{print $1}'
7 голосов
/ 18 февраля 2012
 echo "Hello brave new world" | awk '{print $1}'

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...