Я бы предложил разработать строку заголовка иначе, чем остальную часть файла. В этом частном случае:
awk 'NR==1 {$0=gensub(/(Vulnerability) (ID|URL)/, "\\1_\\2", "g"); print gensub(/(Vulnerability)_(ID|URL)/, "\\1 \\2", "g", $1","$2","$3","$4","$5)} NR>1 {print $1","$2","$3","$4","$5}' test.txt > file.csv
или:
sed -r '1s/(Vulnerability) (ID|URL)/\1_\2/g' test.txt | awk '{print $1","$2","$3","$4","$5}' | sed -r '1s/(Vulnerability)_(ID|URL)/\1 \2/g' > file.csv
Вы получили несколько очень подходящих предложений в комментариях, в частности, о разделении на несколько символов пробела и о том, что вам предлагается использовать другие инструменты для работы с CSV-файлами. Более того, если ваша проблема заключается исключительно в строке заголовка, я бы на вашем месте исправил ее вручную. И... вам действительно нужно иметь пробелы в заголовках (, а не Vulnerability_URL
)? Все зависит от вашего фактического варианта использования.
Разбиение на несколько пробелов кажется мне самым простым:
sed 's/ */,/g' test.txt > file.csv