Awk из коробки не анализирует указанные поля.Если вы хотите извлечь поля в кавычках с помощью Awk, вам нужно реализовать синтаксический анализ полей в кавычках.
Оболочка из коробки разбирает их просто отлично;но вы, вероятно, хотите избежать синтаксического анализа пользовательского ввода в виде кода.
Если вы можете доверять вводу (т. е. он поступает из файла конфигурации, которым вы полностью управляете), тогда что-то вроде
string='a b=34 c d="12 34 54" e f=387'
eval "$string"
установит все переменные в их ожидаемые значения.
Возможно, вы захотите разобрать строку самостоятельно.Попробуйте это:
grepvar () {
grep -Po "$1"'=\K([^"]+|"[^"]*")'
}
a=$(grepvar "a" filename)
b=$(grepvar "b" <<<"$string")
Если у вас нет grep -P
(который является расширением GNU), есть простые обходные пути;но вы не очень много нам рассказываете о своих требованиях, и есть много почти дубликатов этого вопроса, поэтому не составит труда найти что-то подходящее для вас.
Если вы просто хотите распечатать извлеченный файлзначения и ничего не делать с фактическими значениями
grep -Eo 'a=([^"]+|"[^"]*")' filename
grep -Eo 'b=([^"]+|"[^"]*")' <<<"$string"
Выше показано, как читать из файла с именем filename
и как анализировать переменную $string
, которая уже содержит текст.<<<
«здесь строка» является расширением Bash, которое не будет работать, например, с sh
.