awk заключение в кавычки текста программы

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

Следующие 2 строки ведут себя по-другому, если я работаю:

# grep -Rl BASE_DIR --exclude-dir=.svn * | awk -F "/" '{print $1}'

Я получаю (как ожидалось) просто первый каталог пути к файлам, содержащим BASE_DIR.

Однако, если я выполняю его как это:

# grep -Rl BASE_DIR --exclude-dir=.svn * | awk -F="/" "{print $1}"

Править:

-F="/" и -F "/" не имейте значения на моих тестах. вторая команда была обновлена для показа этого

как предложено glenn jackman на ответе я изменил команду на:

# grep -Rl BASE_DIR --exclude-dir=.svn * | awk -F "/" "{print $1}"

и получил тот же самый дефектный результат

Конец РЕДАКТИРОВАНИЯ

Я получаю полный путь в файлы, содержащие BASE_DIR, я пытался выйти из текста программы, таким образом, это будет "{print \$1}" в случае, если это было проблемой, но я получил те же результаты.

Кто-либо может просветить меня относительно того, что проблема здесь?

3
задан 27 March 2013 в 20:48

1 ответ

В первом примере вы делаете: awk -F "/"
В следующем примере вы делаете: awk -F="/"

Таким образом, разделитель полей отличается: вы ' снова используем двухсимвольную строку =/ в качестве разделителя полей


Ах, я не знаю, почему я этого раньше не видел: вы используете неправильные кавычки:

[ 110]

Двойные кавычки вокруг программы awk означают, что оболочка подставит переменную $1 перед тем, как передаст программу awk. Скорее всего, в оболочке $1 пусто, поэтому awk видит это: {print }

Вместо этого используйте одинарные кавычки.

0
ответ дан 27 March 2013 в 20:48

Другие вопросы по тегам:

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