Shell 比较旧文件和新更新记录的文件,并在旧文件中插入新记录

Shell 比较旧文件和新更新记录的文件,并在旧文件中插入新记录,shell,unix,Shell,Unix,我想将新记录附带的文件与服务器中已有记录且存在的同一结构化文件进行比较 与旧文件类似的是file1: SKU PROD NAME CODE PRICE A001 shirt jm s02 478 B002 jean jn j02 348 C003 mwear mw m02 567 新记录附带的新文件为: SKU PROD NAME CODE PRICE A001 shirt jm s02 680 m01 mwear mw m02 567 c02 kurta kr k04 677 d12

我想将新记录附带的文件与服务器中已有记录且存在的同一结构化文件进行比较

与旧文件类似的是file1:

SKU PROD NAME CODE PRICE
A001 shirt jm s02 478
B002 jean jn j02 348
C003  mwear mw m02 567
新记录附带的新文件为:

SKU PROD NAME CODE PRICE
A001 shirt jm s02 680
m01  mwear mw m02 567
c02  kurta kr k04 677
d12  dr d3 d03 400
基于新记录,可以更新旧记录,也可以在旧记录之后追加新记录


我需要为上述场景编写一个unix shell sript。请帮助

反向查看问题:您的新文件基本上是您的最新数据。您可以简单地用新数据替换旧数据,但可能有一些旧数据不在新文件中

因此,一种懒惰的方法可能是读取旧数据,查找新文件中没有的内容,并在需要时添加它

像这样的事情(我脑子里想不出来,无法测试)

读取旧数据时

做
#找到钥匙
sku=$(回显$old|U数据|切割-d \-f1)
#在新数据中查找键,如果不存在,则粘贴该行。
grep sku新文件>/dev/null | | |回显旧数据>>新文件
完成<旧文件

首先在新文件中查找不同的SKU。如果在那里找不到SKU,请从旧文件中获取它

grep SKU file1.txt > out.txt
cat file1.txt file2.txt |\
grep -v SKU | cut -d" " -f1  | sort | uniq | while read sku
do
  grep $sku file2.txt >> out.txt
  if [[ $? -eq 1 ]] # If SKU was not in file2.txt
  then
    grep $sku file1.txt >> out.txt
  fi
done
结果:

SKU PROD NAME CODE PRICE
A001 shirt jm s02 680
B002 jean jn j02 348
C003  mwear mw m02 567
c02  kurta kr k04 677
d12  dr d3 d03 400
m01  mwear mw m02 567

根据新记录,旧记录可以更新…
,所以有密钥吗?给我们一个输入和输出文件的简短示例。SKU是唯一的列..因此文件类似于文件1:SKU产品名称代码价格A001衬衫jm s02 478 B002 jean jn j02 348 C003 mwear m02567@user2652771请详细回答你的问题。不要在评论中发布它们。我想使用shell脚本执行此操作,并且我的文件是平面文件。我们不会对数据库执行任何操作
SKU PROD NAME CODE PRICE
A001 shirt jm s02 680
B002 jean jn j02 348
C003  mwear mw m02 567
c02  kurta kr k04 677
d12  dr d3 d03 400
m01  mwear mw m02 567