Стандартные инструменты командной строки, даже awk, не до конца понимают CSV. Вы можете создать что-то, что работает должным образом с более продвинутым языком, таким как python / perl / ruby / GO / et c.
Если все, что вы хотите сделать, это свернуть разделенные линии, следующий хак может do:
awk -F, 'NF==4{print;next} NF<4{x=(x~/./?x" ":"") $0; if(split(x,a,FS)>=4){print x;x=""}}' input.csv
Или для более простого чтения:
BEGIN {
FS=OFS=","
}
NF==4 {
print
next
}
NF<4 {
x=(x ~ /./ ? x" " : "") $0
if (split(x,a,FS)>=4) {
print x
x=""
}
}
Это будет печататься и двигаться, если в строке 4 поля. Для любого меньшего числа полей он начнет объединять строки, пока не увидит как минимум 4 поля, а затем напечатает то, что собрал. Обратите внимание, что возвращаемое значение функции split()
должно быть числом элементов массива, созданного разделением.