С gawk
(GNU awk) вы можете использовать специальную переменную FPAT
, чтобы определить, как выглядит поле, вместо того, чтобы ограничиваться указанием разделителя:
echo 'a "b1 b2" c'| gawk '{print $2}' FPAT='("[^"]+")|[^[:blank:]]+'
Здесь мы говорим: поле - это либо "
, за которым следуют не "
символы и закрывающий "
-> ("[^"]+")
... или |
последовательность непустых символов -> [^[:blank:]]+
Эти регулярные выражения будут оцениваться по порядку, поэтому поле, заключенное в ""
, имеет приоритет над вторым шаблоном, последовательностью непустых символов (по умолчанию в awk).
См. Руководство по GNU awk: Определение полей по содержимому