テーブルの作成クエリを含む.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個あるファイルはほとんどないので、このスクリプトを作成したいと思います。手書きは良い考えではありません。誰かがより簡単な方法を提案できますか?ありがとうございます!
ベストアンサー1
これはうまくいきます
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変数は各行の最初のインスタンスを格納し、それに基づいて行を保持するかどうかを選択できます。