2013-08-15 2 views
0

У меня есть куча представлений для моей базы данных и вам необходимо обновить операторы select в каждом представлении.Заменить текст из инструкции выбора из одного файла в другой

У меня есть все операторы select в файлах с именем viewname.txt в одном каталоге и в поддиректории, называемом sql; У меня есть все взгляды viewname.sql. Я хочу запустить сценарий, чтобы взять текст с viewname.txt и заменить оператор select в правильном viewname.sql в подкаталоге sql.

Я попытался это, чтобы добавить текст после SELECT, в каждом файле .sql:

for i in */*; do 
    if ["../$(basename "${i}")" == "$(basename "${i}")"] 
    then 
    sed '/SELECT/a "$(basename "$i" .txt)"' "$(basename "$i" .sql)" 
    fi 
done 

Любая помощь очень ценится!

Дики

+0

включить отладчик оболочки с 'set -vx', и вы должны увидеть очевидную логическую ошибку в вашем тесте' if'. Также может захотеть прочитать о документах «ЗДЕСЬ», используя 'sed << - EOS #sed_cmds без одинарных кавычек .... EOS' вы могли бы использовать' cat $ viewname.txt' внутри документа «ЗДЕСЬ» (я достаточно уверен). Удачи. – shellter

ответ

1

Это AWK ответ, что близко - выход находится в каталоге SQL под соответствующие «viewname.sql.new» файлы.

#!/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/* 

Вы должны мв новые файлы на место, но это так близко, как я могу получить прямо сейчас.

Смежные вопросы