gpt4 book ai didi

unix - 使用 gsub 和 awk 从特定列中删除 dot(.)

转载 作者:行者123 更新时间:2023-12-04 07:03:07 25 4
gpt4 key购买 nike

我只想从表的第 4 列和第 5 列中删除 dot(.)。

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 .

你能指出我必须修改的地方吗?
提前致谢。

最佳答案

当您使用字符串来保存 RE(例如 "\." )时,该字符串会被解析两次 - 一次是在 awk 读取脚本时,然后是在 awk 执行时再次解析。结果是您需要两次转义 RE 元字符(例如 "\\." )。

在各方面更好的解决方案不是将 RE 指定为字符串,而是将其指定为 RE 常量,而不是使用适当的分隔符,例如/\./ :

awk 'BEGIN {OFS=FS="\t"} {gsub(/\./,"",$4);gsub(/\./,"",$5)}1' input

关于unix - 使用 gsub 和 awk 从特定列中删除 dot(.),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19036740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com