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

时间:2016-04-27 08:32:57

标签: bash shell awk sed

我的问题是: 我有file1:

foreach ($listLanguages as $language) {
     $packLanguage = new Packs2lng();
     $packLanguage->setLanguage($language);
     $packLanguage->setPack($pack);

     $packLanguage->setPack2lngWording($request->request->get('pack_2lng_wording')[$language->getCode()]);
     $packLanguage->setPack2lngDescription($request->request->get('pack_2lng_description')[$language->getCode()]);
}

和file2

 3119
 3359
 1359
 ...

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

 2222 abc
 3359 def              <---- this is a match
 4444 ghi
 ...

我提出了这个解决方案:

 2222 abc
 3359 PREFIXdef              <---- this is a match
 4444 ghi
 ...

给出了这个结果:

sed `cat file1.txt | awk '{print "-e s/"$1"/"$1"PREFIX./"}'`<<<"`cat file2.txt`"

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

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

 2222 abc
 3359PREFIX def              <---- this is a match
 4444 ghi
 ...

但我无法摆脱'!!!

1 个答案:

答案 0 :(得分: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