Все, У меня есть строка, из которой я хочу извлечь подстроку. Дело в том, что начальная позиция хранится в переменной. AWK, похоже, не распознает переменную.
Вот код
str="This is a test"
s1="is"
i=$(awk -v a="$str" -v b="$s1" 'BEGIN{print index(a,b)}')
echo "$str" | awk '{print substr($0,$i)}'
Но это не работает. Как заставить awk распознать i
?
Почему бы не выполнить всю обработку за один вызов awk?
Если вам нужен сценарий оболочки, чтобы увидеть значение
i
Вы можете добавить> "/dev/tty"
до концаprint
команду выше, затем добавьте еще одну строку, говоря простоprint i
без перенаправления, затем обернуть весьprintf ... | awk ...
линия вi=$(...)
построить.источник
Прямой ответ на исходный вопрос: экранируя кавычки и позволяя оболочке расширять переменную:
Если есть подозрение, что переменная может содержать пробел и другие вещи, и кто-то хочет, чтобы она воспринималась как строка в awk, можно просто использовать еще больше кавычек:
... но каждый часто делает что-то менее оптимальное, если дело доходит до этого :-).
источник