У меня есть файл с разделителями-конвейерами, и мне нужно выполнить 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"


