Я хочу скрипт, который откроет данные текстового файла и запишет запрос на обновление в этот файл и сохранит в файл SQL, который будет выполняться через cron. Я подготовил команду, но она пишет запрос на обновление в RPAD. Ниже приведен пример данных и команды:

text file data : cat file.txt
123456789
234567891
345678912
456789123

Команда:

кошка file.txt | Поле 's' /$ /update table set где file_number = "file.txt" /'> file1.sql

Текущий ВЫХОД:

123456789update table set field where file_number=
234567891update table set field where file_number=
345678912update table set field where file_number=
456789123update table set field where file_number=

Ожидаемый ВЫХОД:

update table set field where file_number='123456789';
update table set field where file_number='234567891';
update table set field where file_number='345678912';
update table set field where file_number='456789123';

1 ответ1

0

Могут быть более элегантные подходы (однако, любой из них приходит мне в голову прямо сейчас), поэтому давайте придерживаться sed .

  • Почему вы не командуете работать так, как вы ожидаете?

    $ соответствует концу строки, поэтому ваша строка update table ... помещается в конце каждой строки.

  • Как улучшить?

    1. Вам не нужна cat ; sed принимает файл в качестве аргумента.
    2. Определите всю строку как соответствующий шаблон (.* Соответствует всему, заключите его в экранированные скобки для ссылки на него: \(.*\)
    3. Используйте командную строку sql в качестве замены и поместите ссылочную метку \1 где это необходимо:

      sed "s|\(.*\)|update table set field where file_number=\'\1\';|" file.txt > file.sql
      

      производства

      update table set field where file_number='123456789';
      update table set field where file_number='234567891';
      update table set field where file_number='345678912';
      update table set field where file_number='456789123';
      

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .