我只有一个文件(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
您能不能尝试按照提供的示例进行以下操作,编写并进行测试?
awk '
/STOCKHOLM/{
close(file)
file=count=""
}
(/STOCKHOLM/ || !NF) && !file{
val=(val?val ORS:"")$0
count++
next
}
count==2{
count=""
file=$NF"_full.txt"
if(val){
print val > (file)
val=""
}
next
}
file{
print >> (file)
}
' Input_file