根据匹配字符串分割文件

问题描述 投票:0回答:1

我只有一个文件(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
shell unix awk grep
1个回答
1
投票

您能不能尝试按照提供的示例进行以下操作,编写并进行测试?

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
© www.soinside.com 2019 - 2024. All rights reserved.