Если у вас GNU awk
:
$ awk -vFPAT='[^,]*|"[^"]*"' '{ gsub("^\"|\"$","",$1); gsub("^\"|\"$","",$4); print $1 $4} '
prabhat,kumarbangalore,India
Формат вывода немного уродливый, так как я напечатал только $ 1
и $ 4
рядом друг с другом - уверен, вы можете переделать на свой вкус.
Если вам нужно сохранить двойные кавычки вокруг полей, удалите обе функции gsub ();
.
Обычно awk
разделяет поля в записи содержимым переменной FS
(Разделитель полей), которая по умолчанию использует любые пробелы (табуляция, пробел и новая линия). Разделитель сообщает awk
, где заканчивается запись. В файле csv
запись заканчивается запятой (передается в awk
как -vFS =,
), но, конечно, в примерах, подобных вашему, это слишком просто и ломается.
В качестве альтернативы, FPAT
(шаблон поля) определяет запись в awk
. Вместо того, чтобы сообщать awk
, где заканчивается запись, вы создаете определение, охватывающее всю запись. В сложном csv
вашего примера это [^,] * | "[^"] * "
Это разбивается следующим образом: -
[^,]
) столько раз, сколько возможно ( *
). Все, что находится между двумя запятыми, является полем. |
) "
), за которыми следует отсутствие двойных кавычек ( [^"]
), как можно больше раз ( *
), за которыми следует одинарная двойная кавычка ( "
). Все, что заключено в двойные кавычки (включая запятую), считается одним полем. Я должен использовать два дефиса для этого параметра, например
$ ps --ppid 1
Моя версия:
$ ps --version
procps-ng version 3.3.4