Shell-Script

從創建表查詢中提取表列

  • May 15, 2017

我有一個具有創建表查詢的 .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 將儲存每行的第一個實例,基於此您可以選擇是否保留行

引用自:https://unix.stackexchange.com/questions/364994