Script UNIX para consulta de atualização LPAD no arquivo cat


0

Eu quero script que irá abrir os dados do arquivo de texto e escrever consulta de atualização para o arquivo e salvar no arquivo SQL que será executado através do cron. Eu preparei o comando, mas está escrevendo a consulta de atualização no RPAD. Abaixo, estão os dados de amostra & amp; comando:

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

Comando:

cat file.txt | campo do conjunto de tabelas / $ / update do sed onde file_number = "file.txt" / '& gt; file1.sql

SAÍDA atual:

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=

Saída esperada:

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';

Respostas:


0

Pode haver abordagens mais elegantes (no entanto, qualquer uma delas vem à minha mente agora), então vamos nos ater a sed.

  • Por que você não manda trabalhar como você espera?

    $ corresponde ao fim da linha é por isso que o seu update table ... string é colocada no final de cada linha.

  • Como melhorar?

    1. Você não precisa cat; sed pega um arquivo como argumento também.
    2. Defina a linha inteira como um padrão de correspondência ( .* corresponde a tudo, coloque-o em colchetes com escape para referenciá-lo: \(.*\)
    3. Use a string de comando sql como um substituto e coloque a marca de referência \1 onde apropriado:

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

      produzindo

      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';
      
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.