Я просто столкнулся с глюком в 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}"
в случае, если это было проблемой, но я получил те же результаты.
Кто-либо может просветить меня относительно того, что проблема здесь?
В первом примере вы делаете: awk -F "/"
В следующем примере вы делаете: awk -F="/"
Таким образом, разделитель полей отличается: вы ' снова используем двухсимвольную строку =/
в качестве разделителя полей
Ах, я не знаю, почему я этого раньше не видел: вы используете неправильные кавычки:
[ 110] Двойные кавычки вокруг программы awk означают, что оболочка подставит переменную $1
перед тем, как передаст программу awk. Скорее всего, в оболочке $1
пусто, поэтому awk видит это: {print }
Вместо этого используйте одинарные кавычки.