Bash - Как обернуть значения первой строки CSV-файла с цитатами
Строка 1 файла CSV имеет значения, разделенные запятой, например:
word1,word2,word3,word4,word5
но нужно заключить в кавычки, как показано ниже:
"word1","word2","word3","word4","word5"
Я хотел бы, чтобы команда обращалась только к строке 1 и оставляла остальную часть файла в покое.
2 ответа
Решение
Рассмотрим этот тестовый файл:
$ cat file.csv
word1,word2,word3,word4,word5
12345,12346,12347,12348,12349
Чтобы поместить кавычки вокруг элементов только в первой строке:
$ sed '1 { s/^/"/; s/,/","/g; s/$/"/ }' file.csv
"word1","word2","word3","word4","word5"
12345,12346,12347,12348,12349
Как это устроено
1 { ... }
Это говорит sed для выполнения команд в фигурных скобках только в строке 1.
s/^/"/
Это ставит цитату в начале строки.
s/,/","/g
Это заменяет каждую запятую на цитату-запятую-цитату.
s/$/"/
Это ставит цитату в конце строки.
Альтернативный подходawk:
awk -F, 'NR==1{ gsub(/[^,]+/,"\"&\"",$0) }1' file
NR==1
- рассмотреть только 1-ую запись