Shell-Script
從創建表查詢中提取表列
我有一個具有創建表查詢的 .sql 文件:
<<<<< some text >>>>> CREATE EXTERNAL TABLE table_name ( key1 int , key2 varchar(256), key3 int , key4 varchar(64), key5 int , ) <<<<<<< some text >>>>>>>>
現在我只需要用逗號分隔並用括號括起來的字元串中的列名。也就是說,對於上表,我想要:
( key1, key2, key3, key4, key5 )
從我的想法來看,它變得非常非常複雜。我想為此編寫腳本,因為我有 150 個這樣的文件,其中很少有大約 300 列。手寫不是一個好主意。有人可以建議一個更簡單的方法嗎?謝謝!
這應該工作
Old_IFS=$IFS IFS=$'\n' file=`cat file.sql` > /dev/null for line in $file do temp=`echo "$line" | awk '{print $1}'` if [[ "$temp" == "create" ]] || [[ "$temp" == "" ]] then echo "" elif [[ "$temp" == "(" ]] then printf "$temp" elif [[ "$temp" == ")" ]] then printf "$temp\n" else printf "$temp," fi done IFS=$Old_IFS exit 0
使用此程式碼創建一個腳本並用您的文件替換“file.sql”,您應該得到您需要的東西
當然我不知道你文件的整個結構,但是如果你想避免其他事情,請在 if 語句中添加子句
變數 temp 將儲存每行的第一個實例,基於此您可以選擇是否保留行