0

我想将带有新记录的文件与已经有记录并存在于服务器中的相同结构化文件进行比较。

像旧文件是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 脚本。请帮忙

4

2 回答 2

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
于 2013-08-19T09:02:47.743 回答
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
于 2013-08-19T09:18:13.457 回答