【发布时间】:2020-02-11 02:19:00
【问题描述】:
我有一个文件(input.txt),如下所示:
# STOCKHOLM 1.0
#=GF AC RF00001
#=GF ID 5S_rRNA
ghgjg---jkhkjhkjhk
## STOCKHOLM 1.0
#=GF AC RF00002
#=GF ID 6S_rRNA
hhhjkjhk---kjhkjhkj
## STOCKHOLM 1.0
#=GF AC RF00005
#=GF ID 12S_rRNA
hkhjhkjhkjuuwww
我必须拆分行等于 ##stockholm1.0 的文件,并用第二个字符串 RF00001_full.txt 中的值命名文件。因此,对于输入文件,我应该能够获得 3 个不同的文件,如下所示:
RF00001_full.txt
# STOCKHOLM 1.0
#=GF AC RF00001
#=GF ID 5S_rRNA
ghgjg---jkhkjhkjhk
RF00002_full.txt
## STOCKHOLM 1.0
#=GF AC RF00002
#=GF ID 6S_rRNA
hhhjkjhk---kjhkjhkj
RF00005_full.txt
## STOCKHOLM 1.0
#=GF AC RF00005
#=GF ID 12S_rRNA
hkhjhkjhkjuuwww
代码,我尝试到现在如下:
while read p;
if [[ $p == ## STOCKHOLM 1.0* ]];
then
#what should I do here to sort the line by OS ?
done <input.txt
【问题讨论】:
-
[[ $p == ## STOCKHOLM 1.0* ]] does not make sense. The#` 引入了一个注释,即使你没有这个问题,一个空格也会表示一个参数的结束。因此你必须引用[[ $p == '## STOCKHOLM 1.0'* ]]