我只想从表格的第4和第5列中删除点(。)。
input
1 10057 . A AC
1 10146 . AC. A
1 10177 . A AC
1 10230 . AC .A,AN
1 10349 . CCCTA C,CCCTAA.
1 10389 . .AC A,AN
desired output
1 10057 . A AC
1 10146 . AC A
1 10177 . A AC
1 10230 . AC A,AN
1 10349 . CCCTA C,CCCTAA
1 10389 . AC A,AN
所以我尝试了以下命令。
awk 'BEGIN {OFS=FS="\t"} {gsub("\.","",$4);gsub("\.","",$5)}1' input
我得到了这个结果(整个第4和第5列被删除了。)
1 10057 .
1 10146 .
1 10177 .
1 10230 .
1 10349 .
1 10389 .
你能指出我要修改的地方吗? 提前谢谢。
答案 0 :(得分:10)
当您使用字符串来保存RE(例如"\."
)时,字符串将被解析两次 - 一次是在awk读取脚本时,然后在由awk执行时再次解析。结果是您需要两次转义RE元字符(例如"\\."
)。
在各方面更好的解决方案是不将RE指定为字符串,而是将其指定为RE常量,而不是使用适当的分隔符,例如/\./
:
awk 'BEGIN {OFS=FS="\t"} {gsub(/\./,"",$4);gsub(/\./,"",$5)}1' input