ubuntu - 当其他列值在 Ubuntu 中的引号内有逗号时,将一个列值复制到 CSV 中的另一个

标签 ubuntu awk

输入 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 

最佳答案

使用 GNU awk:

awk 'NR>1{$(NF+1)=$2} {print}' FS=', ' OFS=', ' file
输出:
姓名、手机、地址、用户手机
Testone, 111111111, "测试, 地址", 111111111
Testtwo, 2222222222, "Testtwo, 地址", 2222222222

见:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

关于ubuntu - 当其他列值在 Ubuntu 中的引号内有逗号时,将一个列值复制到 CSV 中的另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64308075/

相关文章:

ubuntu - 在 Ubuntu 上运行 apt-get update 时,Docker 存储库没有发布文件

c - Unix 套接字示例,编译器找不到 header

c++ - 从源代码构建 openCV 之前的步骤

linux - 非 root 用户解压缩文件时是否可以保留 setgid 位?

linux - 搜索和删除第二列以

linux - 如何在考虑其他文件的情况下显示文件的内容?

bash - 全局匹配和替换多行文本

bash - 如何清理 masscan 输出 (-oL)

linux - 将空格视为 n 列后的空格

bash - 根据行结构拆分文件夹中的所有文件