![如何用另一個文件中的匹配字串替換一個文件中的匹配字串?](https://rvso.com/image/170255/%E5%A6%82%E4%BD%95%E7%94%A8%E5%8F%A6%E4%B8%80%E5%80%8B%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%8C%B9%E9%85%8D%E5%AD%97%E4%B8%B2%E6%9B%BF%E6%8F%9B%E4%B8%80%E5%80%8B%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%8C%B9%E9%85%8D%E5%AD%97%E4%B8%B2%EF%BC%9F.png)
我有一個這樣的文件:
head cleandata.map
1 1:775852:T:C 0 775852
1 1:1120590:A:C 0 1120590
1 1:1145994:T:C 0 1145994
1 1:1148494:A:G 0 1148494
...
還有另一個文件:
head lifted.map
1 1:775852:T:C 0.0 785989
1 1:1120590:A:C 0.0 1130727
1 1:1145994:T:C 0.0 1156131
1 1:1148494:A:G 0.0 1158631
...
我想要得到的是更改 cleandata.map ,它看起來像這樣:
1 1:785989:T:C 0 785989
1 1:1130727:A:C 0 1130727
1 1:1156131:T:C 0 1156131
1 1:1158631:A:G 0 1158631
...
因此,如果lift.map 第2 列中的行與cleandata.map 第2 列中的行匹配,請將cleandata.map 第2 列和第4 列中的行替換為lift.map 中第4 列的值。
答案1
嘗試
$ awk 'FNR==NR {T[$2] = $4; next} $2 in T {gsub ($4, T[$2])} 1' file2 file1
1 1:785989:T:C 0 785989
1 1:1130727:A:C 0 1130727
1 1:1156131:T:C 0 1156131
1 1:1158631:A:G 0 1158631