如何用Awk按指定分隔符为坐标添加分组ID列?
解决按
male_position分组并给坐标添加分组ID的问题 哈哈,我明白你要的效果了——把每行里male_position后面跟着的所有坐标拆成单独行,同时给每个male_position及其对应的坐标行分配同一个递增的分组ID对吧?之前用FNR是按行连续编号,现在要按male_position分组,咱们可以用awk的循环和自定义变量来实现,直接给你写好脚本:
awk '/^male_position/ { # 每次遇到male_position行,分组ID递增 group++ # 先打印male_position和当前分组ID print $1, group # 遍历该行从第2个字段开始的所有坐标,逐个打印并带上分组ID for (i=2; i<=NF; i++) { print $i, group } }' example.file
脚本拆解说明
- 匹配分组行:
/^male_position/会匹配所有以male_position开头的行,不管后面有没有坐标字段,都触发后续处理逻辑。 - 分组ID递增:自定义变量
group初始默认值为0,第一次匹配到male_position时自动变成1,之后每遇到一次就递增,完美实现分组编号的需求。 - 打印分组标识行:
print $1, group会输出male_position(当前行第一个字段)加上当前分组ID,对应你期望输出里的male_position 1这类行。 - 拆分坐标并添加ID:
for (i=2; i<=NF; i++)利用awk内置变量NF(当前行的字段总数),遍历从第2个字段开始的所有坐标值,逐个单独打印一行并带上当前分组ID,就得到了你要的0.0 1这类行。
直接运行这个命令,把example.file换成你的实际文件名,就能得到和你示例完全一致的输出啦!
内容的提问来源于stack exchange,提问作者user95146
相关产品推荐
相关产品推荐

