substituir valores em um arquivo de texto em outro arquivo de texto

-1

Eu quero usar o awk para criar um arquivo de texto que inclua uma série de linhas de texto awk com números que são substituídos. problema que estou tendo é que o texto incluirá a sintaxe awk. em última análise, eu quero acabar com uma linha que se parece com isso:

($2 == "cs.cpool") && (h==1) {printf("%f        %s\n",$1==0.41369093,$2); a=1;}

então eu quero ter todo o texto acima, incluindo o primeiro colchete e o último colchete, imprima junto com o número 0.41369093 que será fornecido por outro arquivo de texto.

Eu tenho um arquivo de texto para os números que quero alimentar, ou seja:

0.41369093

0.00432739

0.03264715

Eu tentei criar isso incluindo o seguinte em um arquivo chamado create.awk:

{printf("\n($2 == cs.cpool) && (h==1) {printf("%f   %s\n",$1==< %f >,$2); a=1;}") }

em que o arquivo de texto de números chamado input.txt substitui o < %f > no acima.

e depois executando com:

awk -f create.awk < input.txt > new.txt

no entanto, recebo o seguinte erro:

awk: syntax error at source line 1 source file create.awk

o contexto é

{printf("\n($2 == cs.cpool) && (h==1) {printf("%f       >>>  %s\ <<< n",$1==< %f >,$2); a=1;}") }

awk: illegal statement at source line 2 source file create.awk

extra }

extra )

Gostaria de receber qualquer ajuda sobre isso. obrigado, Janet

    
por janet 31.08.2015 / 16:29

2 respostas

1

Use os seguintes caracteres de escape %%f , %%s e \" em vez de %f , %s e " dentro do printf (). E você pode usar $ 1 fora de aspas duplas para obter os valores numéricos do arquivo de entrada.

{printf("\n($2 == cs.cpool) && (h==1) {printf(\"%%f %%s\n\",$1=="$1",$2); a=1;}") }.
    
por BKS 31.08.2015 / 17:13
0

Sugiro que você aborde isso de um ângulo diferente. Em vez de gerar 3 scripts awk diferentes, você pode ler os itens do arquivo de entrada com números no array primeiro. Em seguida, leia o arquivo que você precisa para processar e substituir um determinado item da matriz.

Por exemplo, aqui está um código onde eu dou dois arquivos, números primeiro e o segundo arquivo de processamento. Onde var [1], eu li o primeiro item da matriz var , para obter um número específico. Você pode alterar esse número à vontade ou até mesmo usar um loop for para passar pelo array e ler os números do array automaticamente

awk '{i++;if (FILENAME == ARGV[1]) var[i]=$1  }{ if (FILENAME == ARGV[2]) print $2" " var[1]  }' input-nums.txt testfile.txt                                   
one 0.41369093
two 0.41369093
three 0.41369093
    
por Sergiy Kolodyazhnyy 31.08.2015 / 18:25