我有file1:
7 8 pos
0/0 0/1 1
1/1 0/1 2
0/1 ./. 3
./. 0/1 4
0/1 0/1 5
和file2:
7 8 pos
0|0 0|1 1
1|1 1|0 2
0|1 1|0 3
1|1 1|0 4
0|1 0|1 5
我希望将file2
中位于./.
的{{1}}中file1
的所有条目替换为./.
所以我会得到以下文件:
7 8 pos
0|0 0|1 1
1|1 1|0 2
0|1 ./. 3
./. 1|0 4
0|1 0|1 5
我尝试使用:
awk -F"\t" '{ for (i=1;i<=2) { if ($i=="./.") { print NR, NF } } }' file1
获取./.
的所有实例的坐标,但NF
只打印字段总数,而不是匹配特定条件的字段。
尽管如此,上面的代码效率非常低,因为我必须交叉匹配这些位置然后替换。
如果有人能指导我提供更有效的解决方案,我们将不胜感激。谢谢。
答案 0 :(得分:2)
$ cat tst.awk
BEGIN { tgt = "./." }
NR==FNR {
for (i=1;i<=NF;i++) {
if ($i == tgt) {
hit[FNR,i]=1
}
}
next
}
{
for (i=1;i<=NF;i++) {
if ( hit[FNR,i] ) {
$i = tgt
}
}
print
}
$ awk -f tst.awk file1 file2
7 8 pos
0|0 0|1 1
1|1 1|0 2
0|1 ./. 3
./. 1|0 4
0|1 0|1 5