SQL很難解析。如果你的數據非常簡單,而且你的SQL很規則,那麼你可以按照你希望的方式使用awk,看下面的內容。就我個人而言,我可能會檢查數據庫中插入的值,併爲它們掃描腳本,反之亦然。或者插入一堆打印語句並查看錯誤消息的插入位置。
盼望在awk中最好的,讓我們給它的老大學的嘗試:
$ cat dat
INSERT INTO table (
one,
two,
three
)
VALUES (123, 'lorem', 'ipsum');
INSERT INTO table (
one,
three
)
VALUES (123, 'lorem', 'ipsum');
$ tr -d \\n < dat | sed 's/;/&\
/g' | awk -F '[()]' 'split($2, cols, /, /) != split($4, vals, /, /) {print}'
INSERT INTO table (one, three)VALUES (123, 'lorem', 'ipsum');
隨着tr
,我們刪除了換行。通過sed
,我們將每條SQL語句(以;
結尾)放在一行中。使用awk
,我們使用括號作爲分隔符分割每一行,以便列位於$2
,值在$4
。 split
命令返回它們每個有多少個字段,在這兩種情況下都使用逗號作爲分隔符。如果它們不匹配,則打印該行。顯示的最後一行是輸出,因爲列名稱two
缺失。
這可能會返回一些誤報,在您的情況下可能並不可怕。如果數據有分號或逗號,分割將會出錯。如果INSERT沒有提及列名稱,那將是錯誤的。如果有非插入語句,則必須將其過濾出來,或以不同的方式處理它們。
SQL字符串值不需要單引號嗎? –
另外,生成的文件是否有'\ r \ n'行結尾? –
我有不同的問題,但不是很久以前有類似的性質,請嘗試看看,看看你是否可以從這個http://stackoverflow.com/questions/38807810/bash-cut-and-paste-sql -insert-statement @glennjackman yup,字符串值應該被SQL中的單引號包圍。 – dood