我想将一个带有新记录的文件与已经有记录且存在于服务器中的同一结构化文件进行比较。
就像旧文件是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。请帮忙
答案 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