Назначение переменной в каждой строке в быстрой команде awk - PullRequest
2 голосов
/ 01 октября 2010

Awk - это потрясающая манипуляция с текстом, но немного непрозрачная для меня.Я хотел бы запустить команду awk, которая сводится к чему-то подобному

awk '{$x = ($3 > 0 ? 1 : -1); print $1*$x "\t" $2*$x}' file

Я хочу назначить $x в каждой строке, т.е. не используя параметр -v, а затем использовать его внутри моегопечать заявления.К сожалению, после ; awk забыл значения $1 и $2.И размещение задания вне скобок, похоже, тоже не работает.Как это работает?

1 Ответ

4 голосов
/ 01 октября 2010

AWK не использует знаки доллара в своих переменных:

awk '{x = ($3 > 0 ? 1 : -1); print $1*x "\t" $2*x}' file

В вашей версии вы назначаете от 1 или -1 до $ 0 (вся строка ввода), начиная с x==0 (эффективно), когда читается первая строка входного файла. Вот почему $1 и $2 кажутся "забытыми".

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