2014-12-03 103 views
3

我有一個通用SQL查詢,我希望使用bash使用從我從中獲取字符串的grep命令填充所有行。我從文件中獲取的字符串數量也不盡相同。如何在查詢中填充SQL

例子查詢:

select * from table_name 
    where column_name in ('string', 
    'string', 
    'string', 
    'string', 
    'string', 
    'string', 
    'string',) 

基本上我在看電子郵件ID和我得到的消息ID的輸出。每行一個字符串。

grep -Eoh "[a-z0-9]{0,9}\.0\.[0-9]{0,9}\.00\-[0-9]{0,9}\.[0-9]{0,9}\.[a-z0-9{0,10}\.hostname.com" *filename.txt 

62e60645.0.2279968.00-2316.3908868.d02c12m066.hostname.com 
3ebe0645.0.522591.00-2200.908364.a02c11m025.hostname.com 
356f0645.0.1401456.00-2085.2306795.g02c12m014.hostname.com 
9a001645.0.1594149.00-1533.2646910.y01c12m093.hostname.com 

等等。

我希望做的是有所有字符串從到查詢自動插入我的grep命令,這樣我就可以簡單地粘貼在串並運行。

+0

grep命令的輸出包含需要在該sql查詢中的字符串? – 2014-12-03 19:53:46

+0

這是正確的。 – dguard 2014-12-03 19:54:38

回答

3
$ echo 'select * from table_name where column_name in ('"$(grep -Eoh '[a-z0-9]{0,9}\.0\.[0-9]{0,9}\.00\-[0-9]{0,9}\.[0-9]{0,9}\.[a-z0-9]{0,10}\.hostname.com' *filename.txt | awk -v ORS=', ' '{print "\047"$0"\047"}')"')' 
select * from table_name where column_name in ('62e60645.0.2279968.00-2316.3908868.d02c12m066.hostname.com', '3ebe0645.0.522591.00-2200.908364.a02c11m025.hostname.com', '356f0645.0.1401456.00-2085.2306795.g02c12m014.hostname.com', '9a001645.0.1594149.00-1533.2646910.y01c12m093.hostname.com',) 

固定在一個錯字你grep正則表達式。您錯過了最後一個範圍的結尾]

內部awk命令執行行到列表格式。

awk -v ORS=', ' '{print "\047"$0"\047"}')"' 

-v ORS=', '設置ORS(輸出記錄隔板,

{print "\047"$0"\047"}打印與'每行之前和之後它與ORS值在結束時加入。

3

也可以通過由線和呼應迭代線完成它:

#!/bin/bash 
echo 'select * from table_name where column_name in (' 
{ 
    read 
    echo -n "'$REPLY'" 
    while read; do 
     echo -ne ",\n'$REPLY'" 
    done 
} < <(grep -Eoh '[a-z0-9]{0,9}\.0\.[0-9]{0,9}\.00\-[0-9]{0,9}\.[0-9]{0,9}\.[a-z0-9]{0,10}\.hostname.com' *filename.txt) 
echo ')' 

這裏$REPLY包含從由process substitution<(grep ...))所提供的輸入的讀取線(逐個)。

+0

我的榮幸。請參閱:http://stackoverflow.com/help/someone-answers – whoan 2014-12-04 14:45:45