regex - 在 bash 中分解文本文件

标签 regex linux bash unix io

我有一个以下格式的文本文件:

variableStep chrom=chr1 span=10
10161   1
10171   1
10181   2
10191   2
10201   2
10211   2
10221   2
10231   2
10241   2
10251   1
variableStep chrom=chr10 span=10
70711   1
70721   2
70731   2
70741   2
70751   2
70761   2
70771   2
70781   2
70791   1
71161   1
71171   1
71181   1
variableStep chrom=chr11 span=10
104731  1
104741  1
104751  1
104761  1
104771  1
104781  1
104791  1
104801  1
128711  1
128721  1
128731  1

我需要一种方法将其分解为多个文件,例如“chr1.txt”、“chr10.txt 和”chr11.txt。我该怎么做?

我大概是这样的:

cat file.txt | \
while IFS=$'\t' read  -r -a rowArray; do
    echo -e "${rowArray[0]}\t${rowArray[1]}\t${rowArray[2]}"
done > $file.mod.txt

即逐行读取,然后逐行保存。但是,我需要一些更精细的跨越行的东西。 “chr1.txt”将包括从第 10161 1 行到第 10251 1 行的所有内容,“chr10.txt”将包括从第 70711 1 行到第 71181 1 行的所有内容,等等。它也很具体,因为我必须阅读实际每行的 chr#,并将其保存为文件名。

非常感谢您的帮助。

最佳答案

awk -F'[ =]' '
  $1 == "variableStep" {file = $3 ".txt"; next}
  file != "" {print > file}' < input.txt

关于regex - 在 bash 中分解文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17070608/

相关文章:

bash - 从文件名中提取日期子字符串

linux - 调用另一个脚本调用的无限循环在后台运行的 shell 脚本 (.sh)

linux - 获取 .bashrc 时出错,但首次加载时出错

windows - 是否可以覆盖 hashbang/shebang 路径行为

php - 重复字符的预匹配

mysql - 在哪里放置网络服务器根目录?

linux - 如何将输入管道输入到 linux 上的 sublimetext?

javascript - 从正则表达式 js 中的匹配模式中删除空格

c# - Regex.Replace 忽略非捕获组

javascript - jqueryUI Datepicker 加上 dd/mm/yyyy 格式的验证器