0

我的数据库有一堆视图,需要更新每个视图中的选择语句。

我在一个名为viewname.txt的文件和一个名为 sql 的子目录中拥有所有选择语句;我有所有的意见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

非常感谢任何帮助!

迪基

4

1 回答 1

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"
    }
}

我把它放到一个名为的文件中awkochmod +x然后像下面这样运行它

awko *.txt sql/*

您必须将新文件移动到位,但它已经尽可能接近了。

于 2013-08-16T01:24:14.413 回答