По умолчанию awk
использует пробелы для определения полей, что объясняет, почему вы получаете вывод, который видите. Поскольку вы хотите использовать запятую для разделения полей, вам нужно указать это с помощью-F
:
awk -F, '{...}'
Чтобы awk
вывод выводился через запятую, необходимо установить переменную OFS
:
awk -F, -vOFS=, '{...}'
Настоящая трудность здесь заключается в том, что вы пытаетесь рассматривать [role1, role2, role3]
как одно поле, но это 3 поля. Там есть запятые, поэтому они будут разделены на [role1
, role2
и role3]
. Если вы знаете, что там всегда будет ровно 3 поля, это просто:
$ awk -F, -vOFS=, '{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11}' file
hostname,hostname.domain.com,hostname.domain.com,windows,6.2.9200,1.2.3,location,environment,[role1, role2, role3]
Тем не менее, на основе необработанных данных, которые вы сейчас добавили, хотя надлежащий синтаксический анализатор CSV всегда будет лучшим подходом,вы все еще можете сделать это в awk
. Просто запустите это на своих исходных входных данных:
$ awk -F']' -vOFS=, '{gsub(/"/,"");print $1"]"}' file
hostname,hostname.domain.com,hostname.domain.com,windows,6.2.9200,1.2.3,location,environment,[role1, role2, role3]
Хитрость заключается в том, чтобы использовать ]
в качестве разделителя полей и указать awk
печатать только 1-е поле. Это напечатает все до первого ]
. Затем мы добавляем обратно ]
(, так как он удаляется при построении полей ). gsub
удаляет все кавычки.
http://bugzilla.redhat.com/show_bug.cgi?id=1652845
описывает проблему, ищите «разрешить вложение». Говорят, что Red Hat не решит эту проблему с Fedora 28.
Предложение mattdm о создании новой виртуальной машины Fedora, Fedora 33 сработало.