我有两个文件,并且想要使用awk将文件一列中的subtring替换为另一文件中的字符串
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
Run Code Online (Sandbox Code Playgroud)
我想我可以在两个步骤中做到这一点:
但是,是否有一行awk命令来检查子字符串是否在字符串中,然后进行替换?
#抱歉,我应该更清楚地解释它。
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
Run Code Online (Sandbox Code Playgroud)
或现在添加非单一班轮形式的解决方案。
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
Run Code Online (Sandbox Code Playgroud)
编辑:根据@sjsam的情况下的注释substr可能会有所不同,然后根据提供的示例,也可以尝试遵循以下示例。它认为您只希望使用字母作为索引,并从Input_file2行中删除所有内容(OP也在注释中确认了该行)。
awk 'FNR==NR{val=$0;gsub(/[^[a-zA-Z]]*/,"");a[$0]=val;next} {$2=$2 in a?a[$2]:$2} 1' Input_file2 Input_file1
Run Code Online (Sandbox Code Playgroud)
您可以尝试以下吗?
awk 'FNR==NR{a[substr($0,3,3)]=$0;next} {$2=$2 in a?a[$2]:$2} 1' Input_file2 Input_file1
Run Code Online (Sandbox Code Playgroud)
输出如下。
111 33aaa8 777
333 56ccc9 666
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |