Bash - 如何用引号包裹 csv 文件第一行的值

Bash - How to wrap values of the first line of a csv file with quotations

csv 文件的第 1 行的值由逗号分隔,如下所示:

word1,word2,word3,word4,word5

但需要用如下引号括起来:

"word1","word2","word3","word4","word5"

我想要一个只处理第 1 行的命令,而不要管文件的其余部分。

考虑这个测试文件:

$ 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(/[^,]+/,"\"&\"",[=10=]) }1' file
  • NR==1 - 只考虑第一条记录