将一个文本文件中的值替换到另一个文本文件中

将一个文本文件中的值替换到另一个文本文件中

我想使用 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 )

我将非常感激任何有关此事的帮助。谢谢你,珍妮特

答案1

在 printf() 中使用以下转义字符%%f,%%s\"代替%f,%s"。并且您可以在双引号外使用 $1 从输入文件中获取数值。

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

答案2

我建议你从不同的角度来处理这个问题。与其生成 3 个不同的awk脚本,不如先将输入文件中带有数字的项目读入数组。然后,读取需要处理的任何文件并从数组中替换特定项目。

例如,下面这段代码中我给出了两个文件,第一个是数字,第二个是处理文件。var[1] 中,我从数组中读取第一个项目var,以获取特定数字。您可以随意更改该数字,甚至可以使用 for 循环遍历数组并自动从数组中读取数字

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

相关内容