bash - bash:前缀后减去常数
问题描述
我有一个包含许多条目的大型文本文件,如下所示:
/locus_tag="PREFIX_05485"
包括开头的空格。不幸的是,第一个标识符不是以 . 开头的00001
。
这一行中唯一改变的部分是数字。
我想更改 PREFIX(我可以用 轻松做到这一点sed
),但我也想减少数字,所以它看起来像这样:
/locus_tag="myNewPrefix_00001"
(下一个条目应该是..."myNewPrefix_00002"
等等)。或者,该条目也可以不带前导零。
据我所知,sed
无法计算(比如减去一个常数)。有什么想法可以解决这个问题吗?
非常感谢你。如果问题不清楚,请告诉我,我会尽力改进。
编辑:有时相同的数字会出现两次(例如,在修改后的文件中也应该是这种情况
/locus_tag="PREFIX_12345"
/locus_tag="PREFIX_12345"
/locus_tag="PREFIX_12346"
/locus_tag="PREFIX_12347"
应该在最后
/locus_tag="myNewPrefix_00001"
/locus_tag="myNewPrefix_00001"
/locus_tag="myNewPrefix_00002"
/locus_tag="myNewPrefix_00003"
解决方案
您可以使用awk
:
awk -v pf='myNewPrefix' 'BEGIN{FS=OFS="="}
$1 ~ /\/locus_tag$/ && split($2, a, /_/) == 2 {
$2 = sprintf("\"%s_%05d\"", pf, (a[2] in seen ? i : ++i)); seen[a[2]]
} 1' file
/locus_tag="myNewPrefix_00001"
/locus_tag="myNewPrefix_00001"
/locus_tag="myNewPrefix_00002"
/locus_tag="myNewPrefix_00003"
推荐阅读
- reactjs - 是形成一个展示组件还是一个容器组件
- scala - 在 ScalaPB 编译器中避免内部类
- javascript - 如何允许数组中的不同图像链接到不同的 url 网页
- php - Websocket 服务器不允许来自客户端的新连接,卡在 socket_read(没有错误)
- c# - 目标框架符号未定义
- java - NiFi - JOLT Spec 添加自定义字段
- oauth-2.0 - 具有 oauth2 和 spring 安全性的 AWS api 网关
- sql - 如何使表 b 的列仅对表 a 中的不同外键条目唯一
- android - 我们可以为现有应用程序创建即时 android 应用程序吗?
- testing - 赛普拉斯没有收到 XHR 请求