首页 > 解决方案 > 当其他列值在 Ubuntu 中的引号内有逗号时,将一个列值复制到 CSV 中的另一个

问题描述

输入 CSV 样本

name,mobile,address,usermobile
Testone, 111111111, "test,address"
Testtwo, 2222222222, "Testtwo,address"

现在我想将移动列值复制到 usermobile 列中。但是地址列中有一个逗号(,),虽然它在双引号内,但我没有得到预期的输出

预期产出

name,mobile,address,usermobile
Testone, 111111111, "test,address",111111111
Testtwo, 2222222222, "Testtwo,address",2222222222

我已经通过使用以下命令进行了尝试,但没有得到预期的输出

awk 'BEGIN{FPAT = "([^,]+)|(\"[^\"]+\")" && FS=OFS=","} (NR>1) && ($2!=""){$5=$2} 1' test.csv > output.csv 

标签: ubuntuawk

解决方案


使用 GNU awk:

awk 'NR>1{$(NF+1)=$2} {print}' FS=', ' OFS=', ' file

输出:

姓名、手机、地址、用户手机
Testone, 111111111, "测试, 地址", 111111111
Testtwo, 2222222222, "Testtwo, 地址", 2222222222

请参阅:8 个强大的 Awk 内置变量——FSOFS、RS、ORS、NRNF、FILENAME、FNR


推荐阅读