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
- 只考虑第一条记录
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
- 只考虑第一条记录