在linux中合并两个csv文件

在linux中合并两个csv文件,linux,csv,text-processing,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 应添加所有新条目,不应删除任何旧

我正在尝试以下方式将两个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脚本寻找一些更简单的解决方案


提前感谢。:)

您需要更好地定义术语“数据更新”

如果您的文件1有这一行

再见,789

文件2有这些行

你好,789

再见,345

然后您需要指定被认为是“更新”的内容。第一个数字是您的数据密钥吗?这个词是关键吗?这个案例有意义吗?最后一个号码是你的钥匙吗

然后你指定

不应删除旧条目

但是您的结果文件不包括该行

再见,789

所以很明显,您希望删除数据


一旦更好地定义了标准,就可以开始编写解决方案。

您需要更好地定义术语“数据更新”

如果您的文件1有这一行

再见,789

文件2有这些行

你好,789

再见,345

然后您需要指定被认为是“更新”的内容。第一个数字是您的数据密钥吗?这个词是关键吗?这个案例有意义吗?最后一个号码是你的钥匙吗

然后你指定

不应删除旧条目

但是您的结果文件不包括该行

再见,789

所以很明显,您希望删除数据


一旦更好地定义了标准,就可以开始编写解决方案。

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

awk -f parse.awk file1 file2
解析.awk

BEGIN{FS=OFS=“,”}
FNR==NR{
h[$1]=$0
下一个
} 
{h[$1]=$0}
结束{
用于(k in h)
打印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,你好,123
你好,456
你好,789
再见,345

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

awk -f parse.awk file1 file2
解析.awk

BEGIN{FS=OFS=“,”}
FNR==NR{
h[$1]=$0
下一个
} 
{h[$1]=$0}
结束{
用于(k in h)
打印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,你好,123
你好,456
你好,789
再见,345

是否缺少换行符?是否缺少换行符?如果需要,我可以在预处理文件时添加它,有人编辑了你的问题。请注意他们做了什么-这就是它应该是什么样子。还有什么语言可以,或者只是bash/csh?好的,明白了。是的,应该是这样的事实上我已经有了shell脚本,所以通过shell本身寻找一些unix命令或解决方案,您是否缺少换行符?缺少换行符?如果需要,我可以在预处理文件时添加它,有人编辑了你的问题。请注意他们做了什么-这就是它应该是什么样子。还有什么语言可以,或者只是bash/csh?好的,明白了。是的,应该是这样的事实上我已经有了shell脚本,所以通过shell本身寻找一些unix命令或解决方案是我的关键。如果密钥存在于第二个文件中,则应更新旧条目。对于这些文件,结果应该是这样的:3,你好,789 4,再见,345(两个文件中都有3个,本例的最终结果中应该有第二个文件数据)这不是答案,您应该将此移到我认为的注释。第一个数字是我的键。如果密钥存在于第二个文件中,则应更新旧条目。对于这些文件,结果应该是这样的:3,你好,789 4,再见,345(两个文件中都有3个,在本例中,最终结果中应该有第二个文件数据)这不是答案,我认为您应该将此移到注释中。