簡體   English   中英

使用BASH在基於公共列的文本中跨多行連接列

[英]join columns across multiple lines in a Text based on common column using BASH

我有一個像下面的文件。

Table1|Column1
Table2|Column1
Table5|Column1
Table3|Column2
Table2|Column2
Table4|Column3
Table2|Column3
Table2|Column4
Table5|Column4
Table2|Column5 

如果列1中的表名具有相同的屬性,我試圖從下面的文件中生成一個動態SQL JOIn

select * from Table1 a inner join Table2 b on a.Column1=b.column1 inner join Table5 c on a.Column1=c.column1 

select * from Table3 a inner join Table2 b on a.column2 = b.column2 

..etc到文件結尾

最好的方法是什么,請告知。

請注意,同一列可以出現在2個以上的表中(例如最多20個表,那么聯接將重復19次)

這不是一個完整的答案。 但是,我認為您可以使用此答案作為墊腳石來解決問題。

我們使用GNU awk進行解析。 為了提高可讀性,我們使用腳本文件parse.awk而不是一個長命令。

# parse.awk
{ a[$2][$1] };
END {
    for (col in a) {
        printf "%s", col;
        for (tab in a[col])
            printf "|%s", tab;
        print ""
    }
}

當我們調用腳本時...

awk -F\| -f parse.awk yourFile

...在您的示例中,輸出為

Column1|Table5|Table1|Table2
Column2|Table2|Table3
Column3|Table2|Table4
Column4|Table5|Table2
Column5|Table2

從那里您應該能夠構建SQL命令。 您甚至可以修改parse.awk來直接生成SQL命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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