如何在awk中使用带有空格的Sed

use*_*869 2 bash shell awk sed

我的问题是:我有file1:

 3119
 3359
 1359
 ...
Run Code Online (Sandbox Code Playgroud)

和file2

 2222 abc
 3359 def              <---- this is a match
 4444 ghi
 ...
Run Code Online (Sandbox Code Playgroud)

我想通过在字符串前面添加修改文件2中找到文件1的索引的每一行.结果将是:

 2222 abc
 3359 PREFIXdef              <---- this is a match
 4444 ghi
 ...
Run Code Online (Sandbox Code Playgroud)

我想出了这个解决方案:

sed `cat file1.txt | awk '{print "-e s/"$1"/"$1"PREFIX./"}'`<<<"`cat file2.txt`"
Run Code Online (Sandbox Code Playgroud)

给出了这个结果:

 2222 abc
 3359PREFIX def              <---- this is a match
 4444 ghi
 ...
Run Code Online (Sandbox Code Playgroud)

如何在PREFIX之前添加空格并删除之后的空格?我有一个错误(命令未终止)

理想情况下,我会在's/xx/xx'周围添加2个撇号:

sed `cat file1.txt | awk '{print "-e 's/"$1" /"$1" PREFIX./'"}'`<<<"`cat file2.txt`"
Run Code Online (Sandbox Code Playgroud)

但我无法逃脱''!!!

anu*_*ava 6

这个awk命令可以通过将第一个文件中的所有第1列到达关联数组然后针对file2进行检查来处理它:

awk 'FNR==NR{a[$1]; next} $1 in a{$2 = "PREFIX" $2} 1' file1 file2

2222 abc
3359 PREFIXdef
4444 ghi
Run Code Online (Sandbox Code Playgroud)