awk-аргумент $1,$2 конфликтует с входными аргументами bash

Вам не нужно указывать каталог для подтверждения. По умолчанию он копается в текущем каталоге.

I also noticed that the directory has symbolic links

Тогда было бы неплохо посмотреть руководство (либо man ack, либоack --man)и выполнить поиск по запросу «ссылка». Первое, что вы найдете, это опция:

   --[no]follow
       Follow or don't follow symlinks, other than whatever starting files
       or directories were specified on the command line.

       This is off by default.

Это означает, что если вы хотите, чтобы подтверждение переходило по символическим ссылкам, вам необходимо указать параметр --follow.

1
09.10.2019, 21:05
1 ответ

В вашей команде awkесть несколько ошибок.

Следующее будет импортировать $argкак переменную awkarg:

awk -F, -v OFS=, -v arg="$arg" '{ $2 = arg; print }' >"$outfile"

$2невозможно интерпретировать как второй позиционный параметр здесь или в вашем коде, поскольку он встречается в одинарных кавычках, а оболочка не раскрывает переменные в одинарных кавычках.

OFSиarg(оба являются переменными awk)устанавливаются с помощью -vв командной строке. Вы не используете -vдля установки OFSи неправильно используете -vперед фактическим кодом awk. Это дало бы вам ошибку (, о которой вы не упоминаете ). На самом деле -OFS,с GNU awkозначает «включить оптимизацию и установить разделитель полей ввода на строку S,».

Обратите внимание: если$arg(переменная оболочки )содержит обратную косую черту, которую необходимо сохранить, лучше вместо этого передать значение через среду, поскольку в противном случае они будут интерпретированыawk:

arg="$arg" awk -F, -v OFS=, '{ $2 = ENVIRON["arg"]; print }' >"$outfile"

Предполагается, что выходной файл должен быть $outfile, а не outfile.

Связанные:

2
27.01.2020, 23:30

Теги

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