合并 linux 中的两个 csv 文件
merge two csv file in linux
我正在尝试通过以下方式将两个 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有这一行
3,Bye,789
文件 2 有这些行
3,Hello,789
4,Bye,345
那么您需要指定什么是“已更新”。第一个数字是您的数据密钥吗?这个词是关键吗?案件重大吗?最后一个数字是你的钥匙吗?
然后你指定
no old entry should be removed
但您的结果文件不包含行
3,Bye,789
很明显,您希望删除数据。
一旦您更好地定义了标准,就可以开始编写解决方案了。
假设文件中的第一个元素是键,你可以用 awk
这样做:
parse.awk
BEGIN { FS = OFS = "," }
FNR == NR {
h[] = [=10=]
next
}
{ h[] = [=10=] }
END {
for(k in h)
print h[k]
}
运行 像这样:
awk -f parse.awk file1 file2
或单线:
awk 'FNR==NR{h[]=[=12=];next} {h[]=[=12=]}END{for(k in h)print h[k]}' FS=, OFS=, file1 file2
两种情况下的输出:
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有这一行
3,Bye,789
文件 2 有这些行
3,Hello,789
4,Bye,345
那么您需要指定什么是“已更新”。第一个数字是您的数据密钥吗?这个词是关键吗?案件重大吗?最后一个数字是你的钥匙吗?
然后你指定
no old entry should be removed
但您的结果文件不包含行
3,Bye,789
很明显,您希望删除数据。
一旦您更好地定义了标准,就可以开始编写解决方案了。
假设文件中的第一个元素是键,你可以用 awk
这样做:
parse.awk
BEGIN { FS = OFS = "," }
FNR == NR {
h[] = [=10=]
next
}
{ h[] = [=10=] }
END {
for(k in h)
print h[k]
}
运行 像这样:
awk -f parse.awk file1 file2
或单线:
awk 'FNR==NR{h[]=[=12=];next} {h[]=[=12=]}END{for(k in h)print h[k]}' FS=, OFS=, file1 file2
两种情况下的输出:
1,Hello,123
2,Hello,456
3,Hello,789
4,Bye,345