我的数据库有很多视图,需要更新每个视图中的select语句。
我在一个目录和一个名为sql的子目录中的文件中名为 viewname.txt 的所有select语句;我有所有的视图 viewname.sql 。我想运行一个脚本从 viewname.txt 获取文本,并在sql子目录中的正确的 viewname.sql 中替换select语句。
我试过在每个.sql文件中附加SELECT之后的文本:
for i in */*; do
if ["../$(basename "${i}")" == "$(basename "${i}")"]
then
sed '/SELECT/a "$(basename "$i" .txt)"' "$(basename "$i" .sql)"
fi
done
非常感谢任何帮助!
迪基
答案 0 :(得分:1)
这是一个关闭的awk答案 - 输出放在相应“viewname.sql.new”文件下的sql目录中。
#!/usr/bin/awk -f
# absorb the whole viewname.txt file into arr when the first line is read
FILENAME ~ /\.txt$/ && FILENAME != last_filename {
last_filename = FILENAME
# get the viewname part of the file name
split( FILENAME, file_arr, "." )
while( getline file_data <FILENAME > 0 ) {
old_data = arr[ file_arr[ 1 ] ]
arr[ file_arr[ 1 ] ] = \
old_data (old_data == "" ? "" : "\n") file_data
}
next
}
# process each line of the sql/viewname.sql files
FILENAME ~ /\.sql$/ {
# strip the "/sql" from the front of FILENAME for lookup in arr
split( substr( FILENAME, 5 ), file_arr, "." )
if( file_arr[ 1 ] in arr ) {
if( $0 ~ /SELECT/ )
print arr[ file_arr[ 1 ] ] > FILENAME ".new"
else
print $0 > FILENAME ".new"
}
}
我把它放到一个名为awko
和chmod +x
的文件中,并按照以下方式运行
awko *.txt sql/*
你必须将新文件放到适当的位置,但它现在已经接近我了。