특정 코딩 문제에 대해 도움을 줄 수 있는 사람이 있는지 궁금합니다. 다음 내용이 포함된 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
.