замените значениями в одном текстовом файле в другой текстовый файл

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

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

таким образом, я хочу иметь весь вышеупомянутый текст, включая первую скобку и последнюю скобку, распечатать наряду с номером 0.41369093, который будет предоставлен другим текстовым файлом.

у меня есть текстовый файл для чисел, которые я хочу подать в, т.е.:

0.41369093

0.00432739

0.03264715

Я попытался создать это включением следующего в файле, названном create.awk:

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

где текстовый файл чисел под названием input.txt заменяет < %f > в вышеупомянутом.

затем выполнение с:

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

однако, я получаю следующую ошибку:

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

контекст

{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 )

Я ценил бы любую помощь на этом. спасибо, Janet

-1
задан 31 August 2015 в 19:52

2 ответа

Используйте следующие символы ESC %%f, %%s и \" вместо %f, %s и " внутренняя часть printf (). И можно использовать 1$ вне двойных кавычек для получения численных значений из входного файла.

{printf("\n($2 == cs.cpool) && (h==1) {printf(\"%%f %%s\n\",$1=="$1",$2); a=1;}") }.
1
ответ дан 1 October 2019 в 02:39

Я предлагаю, чтобы Вы приблизились к этому от другого угла. Вместо того, чтобы генерировать 3 различных awk сценарии, можно считать объекты из входного файла с числами в массив сначала. Затем считайте любой файл, необходимо обработать и заменить конкретным объектом от массива.

Например, вот код, где я даю два файла, числа сначала и второй файл обработки. Где var[1], я считал первый объект из массива var, получить определенное число. Можно изменить то число по желанию или даже использовать, чтобы цикл ступил через массив, и считайте числа из массива автоматически

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
0
ответ дан 1 October 2019 в 02:39

Другие вопросы по тегам:

Похожие вопросы: