如何使用awk将文件列中的子字符串替换为另一个文件中的字符串?

如何使用awk将文件列中的子字符串替换为另一个文件中的字符串?,awk,Awk,我得到了两个文件,希望使用awk将文件的一列中的子字符串替换为另一个文件中的字符串 f1: 1a1 aaa 777 3_3 ccc 6b6 3.3 ddd 666 f2: b5g9aaa8y 5_6ccc9. output: 1a1 b5g9aaa8y 777 3_3 5_6ccc9. 6b6 我想我可以在两个步骤内做到这一点: 生成子字符串和字符串的交集dict文件 使用awk(接头)来完成它 但是,是否有一行awk命令来检查字符串中是否有子字符串,然后进行替换 # 对不起,我应该解释得

我得到了两个文件,希望使用awk将文件的一列中的子字符串替换为另一个文件中的字符串

f1:
1a1 aaa 777
3_3 ccc 6b6
3.3 ddd 666

f2:
b5g9aaa8y
5_6ccc9.

output:
1a1 b5g9aaa8y 777
3_3 5_6ccc9. 6b6
我想我可以在两个步骤内做到这一点:

  • 生成子字符串和字符串的交集dict文件
  • 使用awk(接头)来完成它
  • 但是,是否有一行awk命令来检查字符串中是否有子字符串,然后进行替换

    # 对不起,我应该解释得更清楚些

  • file2中的字符串格式和长度不是固定的
  • 文件1和文件2的记录数不相同。file2是file1的子集,只需输出file2中的字符串即可
  • 假设没有多次点击
  • EDIT2:由于OP现在更改了样本并添加了完整条件,因此添加此解决方案

    awk 'FNR==NR{a[$2]=$1;b[$2]=$3;next} {for(i in a){if(index($0,i)){print a[i],$0,b[i];delete a[i];break}}}'  Input_file1   Input_file2
    
    或者现在添加一个非线性形式的解决方案

    awk '
    FNR==NR{
      a[$2]=$1
      b[$2]=$3
      next
    }
    {
      for(i in a){
        if(index($0,i)){
          print a[i],$0,b[i]
          delete a[i]
          break;
        }
      }
    }'  Input_file1  Input_file2
    


    编辑:根据@sjsam注释,如果
    substr
    的案例范围可能会有所不同,那么根据示例,也可以尝试以下内容。它认为您只希望使用字母作为索引,并删除输入文件2行中的所有内容(OP也在评论中确认了这一点)



    你能试试下面的吗

    awk 'FNR==NR{a[substr($0,3,3)]=$0;next} {$2=$2 in a?a[$2]:$2} 1' Input_file2   Input_file1
    
    输出如下

    111 33aaa8 777
    333 56ccc9 666
    
    111 33aaa8 777
    333 56ccc9 666