0

(たとえば)以下に示すように、file1.csvとfile2.csvの2つの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 に答える