我有一个以下格式的文本文件:
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/