引用大型 .csv 文件中的前两列

引用大型 .csv 文件中的前两列

我有一个大约 2500 万行的大型 csv 文件256列。 CSV 文件的字段分隔符是~字符。

我想像这样替换前两列数据

From : data1~data2~data3..................................
To   : "data1"~"data2"~data3................................

我目前正在使用awk,但像这样:

cat file | awk -F "~" '{print "\""$1"\"""\""$2"\"~"$3"~"$4"~"...................}'

所以我在 awk 中输入 256 列,例如$4"~"$5"~"$6"~".....$256"~"

还有其他更好的编码方式吗?

答案1

不,您不需要指定所有 256 个字段,只需更改第一列和第二列即可执行以下操作,然后执行printwithOFS='~'并避免cat使用awkwhileawk也可以单独从文件中读取。

awk -F'~' '{$1="\""$1"\""; $2="\""$2"\""; print}' OFS='~' infile

对最后两个字段进行更改。

awk -F'~' '{$(NF-1)="\""$(NF-1)"\""; $NF="\""$NF"\""; print}' OFS='~' infile

答案2

通常sed会写

sed 's/[^~]*/"&"/;s//"&"/2'

但是因为你提到了一个大文件,所以这个可能是快多了比上面的解决方案或awk版本:

sed 's/\(^[^~]*\)~\([^~]*\)/"\1"~"\2"/'

或者,使用扩展的正则表达式可能更容易阅读:

sed -E 's/(^[^~]*)~([^~]*)/"\1"~"\2"/'

相关内容