bash - 用 bash 中的另一列替换 CSV 文件中的列

标签 bash csv awk

我有一个包含许多列的 csv 文件。我正在尝试用同一文件中的倒数第二列替换第二列。 例如,如果我有一个文件,sample.csv

1,2,3,4,5,6
a,b,c,d,e,f
g,h,i,j,k,l

我要输出:

1,5,3,4,5,6
a,e,c,d,e,f
g,k,i,j,k,l

谁能帮我完成这个任务?另请注意,之后我将使用 cut 函数丢弃最后两列,因此我愿意首先分离 csv 文件,以便我可以将一个 csv 文件中的列替换为另一个 csv 文件中的另一列。哪个更容易实现。在此先感谢您的帮助。

最佳答案

这个更简单的 awk 怎么样:

awk 'BEGIN{FS=OFS=","} {$2=$(NF-1)}'1 sample.csv

编辑:注意到您还想丢弃最后两列。使用这个 awk 单行代码:

awk 'BEGIN{FS=OFS=","} {$2=$(NF-1); NF=NF-2}'1 sample.csv

关于bash - 用 bash 中的另一列替换 CSV 文件中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17369202/

相关文章:

string - 根据另一个文件的信息从一个文件中提取行和子字符串

c - Fork() 工作不正确,返回 3 次

mysql - 在.bash_profile中已经设置了路径但仍然得到 '-bash: mysql: command not found'

sql - 在 postgres 中拆分列值

linux - Bash 脚本中的数组长度为 1

php - 使用 shell 脚本将 CSV 文件上传到数据库显示错误

php - 使用大型数据集将 Parse JSON 输出转换为 CSV

shell - 无法通过管道将 docker pid 传递给 bash 命令

awk - 在 awk 中测试一个不存在的变量

linux - 在 bash 中的不同列上运行不同的管道