[英]compare DDL with bash
我需要為同一個表比較兩個 ddl 並確定更改:
例如 DDL_1 是
column_1 int
column_2 char(10)
column_3 char(20)
DDL_2 是
column_1 int
column_3 char(40)
column_4 int
所以:
column_2 已刪除
添加了 column_4
column_3 數據類型更改
我需要獲取 3 個文件: deleted
、 added
、 changed
如果我使用comm -23 DDL_1 DDL_2 > deleted
我會得到 column_2 (刪除)但也會得到 column_3
comm -13 DDL_1 DDL_2 > added
我會得到 column_4 (添加)但也會得到 column_3
如何獲得正確的 output?
非常感謝
塞爾吉奧
awk
來救援!
$ awk 'FNR==1 {split(FILENAME,f,"_"); prefix=f[1]}
NR==FNR {a[$1]=$2; next}
$1 in a {if(a[$1]!=$2) print > (prefix"_changed");
delete a[$1]; next}
{print > (prefix_"added")}
END {for(k in a) print k,a[k] > (prefix_"deleted")}' prefix_file1 prefix_file2
$ head added changed deleted
==> prefix_added <==
column_4 int
==> prefix_changed <==
column_3 char(40)
==> prefix_deleted <==
column_2 char(10)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.