linux - 在linux中合​​并两个csv文件

标签 linux csv text-processing

我正在尝试通过以下方式将两个 csv 文件合并为一个文件。 第一个文件:包含所有数据。 第二个文件:包含更新的数据。

所以结果文件应该包含所有数据,行通过第二个文件数据修改..

例子:

file1:
1,Hello,123
2,Hello,456
3,Bye,789

file2:
1,Hello,123
3,Hello,789
4,Bye,345

resulted file:
1,Hello,123
2,Hello,456
3,Hello,789
4,Bye,345

应添加所有新条目,不应删除旧条目,应在结果中更新任何更新的条目。

我正在通过一些 shell 脚本寻找一些更简单的解决方案。

提前致谢。 :)

最佳答案

假设文件中的第一个元素是键,您可以像这样使用 awk 来做到这一点:

parse.awk

BEGIN { FS = OFS = "," }

FNR == NR { 
  h[$1] = $0
  next
} 

{ h[$1] = $0 }

END { 
  for(k in h)
    print h[k]
}

像这样运行它:

awk -f parse.awk file1 file2

或者作为单行:

awk 'FNR==NR{h[$1]=$0;next} {h[$1]=$0}END{for(k in h)print h[k]}' FS=, OFS=, file1 file2

两种情况下的输出:

1,Hello,123
2,Hello,456
3,Hello,789
4,Bye,345

关于linux - 在linux中合​​并两个csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43479409/

相关文章:

linux - 优化从大数据集中提取文本

linux - GNU Automake - dist_bin_SCRIPTS 如何工作,我可以更改它吗?

Bash:按前 4 列对 csv 文件进行排序

r - 计算词列表中的词频

linux - Ultragrid RTSP 错误

Debian Linux 中的 JavaFX MediaPlayer 异常

php - 使用 PHP 从 mysql 导出到 csv 时获取列名

python - 2 个 csv 文件之间的循环在第一马赫处停止

python - 识别python中的动词时态

python - 多语言文本语料库的词干提取