You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用bash awk按染色体行头拆分TXT文件为对应独立文件

方案1:单次awk遍历直接拆分(推荐,效率最高)

该方案仅需读取一次原文件即可完成所有染色体拆分,无需循环,天然避免匹配错误、多余行残留问题:

awk '/^chr[0-9]+$/{
  close(outfile)
  outfile = $0".txt"
  next
}
{print > outfile}' gwe.txt

逻辑说明:

  • 用^和$限定整行匹配染色体头,完全避免chr1匹配到chr10、chr11这类问题
  • 识别到染色体头行时,关闭上一个输出文件,更新当前输出文件名,直接跳过该行不输出
  • 其余数值行直接写入对应染色体文件,自动过滤所有chr开头的行头

方案2:修复你的bash循环写法

你原有写法存在3个错误:

  1. bash变量在单引号包裹的awk代码中无法解析,需要通过-v参数传入awk
  2. bash中不能直接用${num+1}做算术运算,需写成$((num+1))格式
  3. 正则无边界限定、范围匹配默认包含结束行,会导致多余内容写入

修复后的循环代码如下:

for num in {1..21}; do
  next_num=$((num+1))
  awk -v n="$num" -v nn="$next_num" '$0=="chr"n{f=1;next} $0=="chr"nn{f=0} f' gwe.txt > chr${num}.txt
done
# 单独处理最后一条染色体chr22
awk '$0=="chr22"{f=1;next} f' gwe.txt > chr22.txt

逻辑说明:

  • 匹配到当前染色体头时将标记位f设为1,跳过当前行
  • 匹配到下一条染色体头时将标记位f设为0
  • 仅当f为1时输出内容,完美过滤两个染色体头,无多余内容残留

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 17:45:02