(比方说)我有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的详细信息,但是与它相关的一些数据是不同的(这里是版本和成本) - as如下所示。
ID,field,old,new
2000,cost,40,45
3000,version,3,4
3000,cost,50,55
我需要一个unix
bash/ksh
脚本来执行此操作。我尝试使用sed/grep
但无法获得正确的o / p。请帮帮我。
答案 0 :(得分:1)
不是最优雅的解决方案,但它应该有效:
#!/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"