0

(比如说)我有 2 个 csv 文件 - file1.csv & file2.csv,如下所述:

**file1.csv**       
ID,version,cost                        
1000,1,30     
2000,2,40     
3000,3,50     
4000,4,60  



**file2.csv**      
ID,version,cost     
1000,1,30       
2000,2,45     
3000,4,55   
6000,5,70   

预期的 o/p 是一个新的 csv 文件,比如说 - file3.csv 应该包含两个文件中都存在的 ID 的详细信息,但与它相关的一些数据是不同的(这里是版本和成本) - 如下所示。

ID,field,old,new  
2000,cost,40,45     
3000,version,3,4    
3000,cost,50,55 

我需要一个unix bash/ksh脚本来执行此操作。我尝试了sed/grep但无法获得正确的 o/p。请帮帮我。

4

1 回答 1

3

不是最优雅的解决方案,但它应该可以工作:

#!/usr/bin/ksh

csv1=file1.csv
csv2=file2.csv

echo "ID,field,old,new"
while read line; do
  grep "$line" "$csv2" >/dev/null && continue
  id=`echo "$line" | cut -d, -f1`
  grep "^$id," "$csv2" >/dev/null || continue
  version1=`echo "$line" | cut -d, -f2`
  cost1=`echo "$line" | cut -d, -f3`
  version2=`grep "^$id," "$csv2" | cut -d, -f2`
  cost2=`grep "^$id," "$csv2" | cut -d, -f3`
  if [ "$version1" != "$version2" ]; then
    echo "$id,version,$version1,$version2"
  fi
  if [ "$cost1" != "$cost2" ]; then
    echo "$id,cost,$cost1,$cost2"
  fi
done < "$csv1"
于 2013-03-13T20:08:49.157 回答