如何使用awk将文件列中的子字符串替换为另一个文件中的字符串?
我得到了两个文件,希望使用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命令来检查字符串中是否有子字符串,然后进行替换 # 对不起,我应该解释得
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
我想我可以在两个步骤内做到这一点:
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