如何用BASH中另一个文件中的行替换CSV文件的列?

时间:2013-11-09 12:45:27

标签: bash csv awk

我有一个4列的CSV文件,data.csv使用“@”作为分隔符,例如:

1@fish@ocean@likes to swim in the ocean
2@whale@ocean@likes to swim in the ocean

要仅编辑第4列,我使用了以下命令:

awk -F "@*" '{print $4}' data.csv > temp.csv

然后我运行了一些额外的脚本来修改temp.csv

现在,我需要将temp.csv的内容返回到data.csv,替换data.csv第4列中的所有内容。

如何使用data.csv中已修改的行替换temp.csv第4列的内容?

2 个答案:

答案 0 :(得分:4)

您还可以使用pastecut

cut -d@ -f1-3 data.csv | paste -d@ - temp.csv

答案 1 :(得分:3)

我赞成了另一个答案,但是为了让你了解awk中的方法:

首先准备好temp.csv文件:

$ cut -d@ -f4 data.csv | sed -e 's,ocean,lava,g' > temp.csv

当您从temp.csv读取每一行时,您从data.csv读取一行,覆盖该行中的第四个字段:

$ awk -F@ -vOFS=@ '{ getline $4 < "temp.csv" ; print }' data.csv
1@fish@ocean@likes to swim in the lava
2@whale@ocean@likes to swim in the lava