Я хочу использовать 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
Используйте следующие символы ESC %%f
, %%s
и \"
вместо %f
, %s
и "
внутренняя часть printf (). И можно использовать 1$ вне двойных кавычек для получения численных значений из входного файла.
{printf("\n($2 == cs.cpool) && (h==1) {printf(\"%%f %%s\n\",$1=="$1",$2); a=1;}") }.
Я предлагаю, чтобы Вы приблизились к этому от другого угла. Вместо того, чтобы генерировать 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