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-ую запись
Другие вопросы по тегам