Почему скрипт bash + awk выдает ошибку? - PullRequest
1 голос
/ 09 декабря 2011

У меня есть простой скрипт:

#!/bin/sh
column=$1
awk '{print $'$column'}'

Когда я бегу:

ls -la | ./Column.sh

Я получаю:

awk: {print $}
awk:         ^ syntax error

Почему? Все кажется правильным.

Ответы [ 3 ]

2 голосов
/ 09 декабря 2011

Не очень понятно, что вы хотите, чтобы скрипт делал.

Причиной этой ошибки является то, что вы не передаете скрипту никаких аргументов. В результате $1 пусто.

Вам нужно передать номер столбца, который вы хотите напечатать:

ls -la | ./Column.sh 1

Распечатает столбец разрешений, который находится в столбце 1.

1 голос
/ 09 декабря 2011

Вы не передаете аргумент в Column.sh, поэтому $ 1 является пустой строкой.Возможно, вы хотели сделать:

ls -a | while read name; do ./Column.sh $name; done
0 голосов
/ 09 декабря 2011

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

#!/bin/sh
awk -v "column=${1:-1}" '{print $column}'

Я использую механизм оболочки «значение по умолчанию», чтобы обеспечить значение по умолчанию 1, если параметр не указан.

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