我想仅从表格的第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
Run Code Online (Sandbox Code Playgroud)
所以我尝试了以下命令.
awk 'BEGIN {OFS=FS="\t"} {gsub("\.","",$4);gsub("\.","",$5)}1' input
Run Code Online (Sandbox Code Playgroud)
我得到了这个结果(整个第4和第5列被删除了).
1 10057 .
1 10146 .
1 10177 .
1 10230 .
1 10349 .
1 10389 .
Run Code Online (Sandbox Code Playgroud)
你能指出我要修改的地方吗?提前致谢.
Ed *_*ton 10
当您使用字符串来保存RE(例如"\."
)时,字符串被解析两次 - 一次是在awk读取脚本时,然后在由awk执行时再次解析.结果是你需要两次逃避RE元字符(例如"\\."
).
各种方法中更好的解决方案是不将RE指定为字符串,而是使用适当的分隔符将其指定为RE常量,例如/\./
:
awk 'BEGIN {OFS=FS="\t"} {gsub(/\./,"",$4);gsub(/\./,"",$5)}1' input
Run Code Online (Sandbox Code Playgroud)