Передать аргумент скрипта в команду awk

Передать аргумент скрипта в команду awk

У меня есть файл с разделителями-конвейерами, и мне нужно выполнить grep первого столбца, и если шаблон совпадет, я выведу всю строку. Команда ниже работает, но когда я помещаю ее в скрипт, я думаю, что это $1конфликтует с командой:

Команда:

awk -F'|' < filename '{if ($1 == "stringtomatch") print $0}'

Сценарий:

./scripts.sh stringtomatch

Команда в скрипте:

awk -F'|' < filename '{if ($1 == "$1") print $0}'

Заключенное $1в двойные кавычки — это аргумент, переданный скрипту. Есть ли у вас какие-нибудь советы, как заставить это работать?

решение1

Обратите внимание, что вы можете значительно упростить свой awk. Действие по умолчанию, если выражение вычисляется как , true— это печать текущей строки. Так что это делает то же самое:

awk -F'|' < filename '$1 == "string"'

В любом случае, вы можете использовать -vопцию для передачи переменной. Таким образом, ваш скрипт может быть:

#/bin/sh

if [ $# -lt 1 ]; then
  echo "At least one argument is required"
  exit
fi

## Allow the script to get the filename from the 2nd argument, 
## default to 'filename' if no second argument is given
file=${2:-filename}

awk -F'|' -v str="$1" '$1 == str' "$file"

Связанный контент