루프에서 특정 검색 변수의 마지막 인스턴스 뒤에 문자열이나 줄을 삽입합니다.

루프에서 특정 검색 변수의 마지막 인스턴스 뒤에 문자열이나 줄을 삽입합니다.

특정 코딩 문제에 대해 도움을 줄 수 있는 사람이 있는지 궁금합니다. 다음 내용이 포함된 DNA 시퀀싱 파일이 있습니다(예:).

Plate1A1_R1_AGTAGTACGACTAGCATCAGCATACGATCAGCATCAGCATCAG 
Plate1A1_R1_GTAGATCGATGCATGCATGCTAGCTAGCTAGCTAGCTAGCTAA 
Plate1A1_R1_AGCTAGCATCGATCGATGCTAGCATGCATCGATCGATGCATGC 
Plate1A1_R2_AGCATCGATGCAGCATGCTAGCTAGCTAGCTAGCAGCTAGTCT 
Plate1A1_R2_AGCATGCATCGATCGTAGCTAGCAGCGAGCGGCATCGATCGAT 
Plate1A2_R1_CAGCTAGATGCATCGATCGATCGATCGATCGATGCTAGCTTAC 
Plate1A2_R1_CAGTAGCATGCATGCATGCATGCATGCATCGATGCTAGCTAGC 
Plate1A2_R1_ACAACGTAGCTAGCTAGCTACTACTAGTCATCATCGATGCTAG 
Plate1A2_R1_CAGCTAGCTAGCTAGCTAGGCTACATCGATCGTAGCTAGTCGA 
Plate1A2_R1_CAGTCAGCATGCTATCGATCGTAGCTAGTCATCGATGTAGTGA
... etc.

일부 선이 동일한 유사한 시작 패턴에 속하는 것을 볼 수 있습니다(여기서는 Plate1A1_R1, Plate1A1_R2, Plate1A2_R1). 다음과 같이 각 그룹화 뒤에 빈 줄을 넣고 싶습니다.

Plate1A1_R1_AGTAGTACGACTAGCATCAGCATACGATCAGCATCAGCATCAG 
Plate1A1_R1_GTAGATCGATGCATGCATGCTAGCTAGCTAGCTAGCTAGCTAA 
Plate1A1_R1_AGCTAGCATCGATCGATGCTAGCATGCATCGATCGATGCATGC 

Plate1A1_R2_AGCATCGATGCAGCATGCTAGCTAGCTAGCTAGCAGCTAGTCT
Plate1A1_R2_AGCATGCATCGATCGTAGCTAGCAGCGAGCGGCATCGATCGAT

Plate1A2_R1_CAGCTAGATGCATCGATCGATCGATCGATCGATGCTAGCTTAC 
Plate1A2_R1_CAGTAGCATGCATGCATGCATGCATGCATCGATGCTAGCTAGC 
Plate1A2_R1_ACAACGTAGCTAGCTAGCTACTACTAGTCATCATCGATGCTAG 
Plate1A2_R1_CAGCTAGCTAGCTAGCTAGGCTACATCGATCGTAGCTAGTCGA 
Plate1A2_R1_CAGTCAGCATGCTATCGATCGTAGCTAGTCATCGATGTAGTGA

... etc.

즉, 각 줄의 처음 11자를 가져와서 아래 줄에서 패턴이 더 이상 발생하지 않는 지점을 검색하고 해당 지점에 빈 줄을 삽입할 수 있어야 합니다.

나는 노력했다sed그리고루프 문제로 어려움을 겪고 있지만 while read line텍스트 파일의 연속 라인에 사용할 검색 변수의 처음 11자를 저장하는 방법을 찾을 수 없는 것 같습니다(검색 변수가 단일 라인 처리에서 "멈춘" 경우).

누군가가 리디렉션(<)을 통해 참조 파일에 액세스할 수 있는 솔루션을 제공할 수 있기를 바랍니다. 이 형식에는 수백 줄의 DNA 서열 데이터가 있고 파일을 하나씩 통과하는 스크립트로 정의된 수백 개의 다른 "플레이트 이름"이 있습니다. 한 행 이동), 예를 들어

while read line ; do echo "${line:0:11}" ; done < filename.txt

어떤 조언이라도 감사드립니다!

답변1

awk '{
  thisplate=substr($0, 1, 11); 
  if (thisplate != plate) { 
    print ""; 
    plate=thisplate 
  };
  print }' < input | sed '1d'

이것은 Sukminder가 방금 작성한 주석의 더 긴 버전입니다. 11자 접두어를 저장하고 새 접두어가 이전 접두어와 다른 경우 개행 문자를 인쇄합니다. 비어 있는 첫 번째 줄을 제거합니다 sed.

관련 정보