簡體   English   中英

將 DDL 與 bash 進行比較

[英]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 個文件: deletedaddedchanged

如果我使用
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM