比较旧的和新文件的文件以及在旧文件中插入新记录

时间:2013-08-19 08:34:10

标签: 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  dr d3 d03 400

根据新记录,可以更新旧记录,也可以在旧记录之后追加新记录。

我需要为上面的场景写一个unix shell sript。请帮忙

2 个答案:

答案 0 :(得分:0)

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

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

像这样的东西(在我的头顶,无法测试它)

while read old_data
do
    # find the key
    sku=$(echo $old_data | cut -d\  -f1)

    # Look for key in new data, paste the line if it's not there.
    grep sku new_file > /dev/null || echo old_data >> new_file
done < old_file

答案 1 :(得分:0)

首先在新文件中查找不同的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