길이 조건에 따라 문자열을 더 작은 부분 문자열로 나누는 방법은 무엇입니까?

길이 조건에 따라 문자열을 더 작은 부분 문자열로 나누는 방법은 무엇입니까?

다음과 같은 유전자 서열이 포함된 파일이 있습니다.

tgcaccaaacatgtctaaagctggaaccaaaattactttctttgaagacaaaaactttcaaggccgccactatgacagcgattgcgactgtgcagatttccacatgtacctgagccgctgactccatcagagtggaaggaggcacctgggctgtgtatgaaaggcccaattttgctgggtacatgtacatcctaccccggggcgagtatcctgagtaccagcactggatgggcctcaacgaccgcctcagctcctgcagggctgttcacctgtctagtggaggccagtataagcttcagatctttgagaaaggggattttaatggtcagatgcatgagaccacggaagactgcccttccatcatggagcatccacatgcgggaggtccactcctgtaaggtgctggagggcgcctggatcttctatgagctgcccaactaccgagcaggcagtacctgctggacaagaaggagtaccggaagcccgtcgactggggtgcagcttccccagctgtccagctttccgccgcattgtggagtgatgatacagatgcggccaaacgctggctggccttgtcatccaaataagcattataaataaaacaattggcatgc

MDITIHNPLIRRPLFSWLAPSRIFDQIFGEHLQESELLPASPSLSPFLMRSPIFRMPSWLETGLSEMRLEKDKFSVNLDVKHFSPEELKVKVLGDMVEIHGKHEERQDEHGFIAREFNRKYRIPADVDPLTITSSLSLDGVLTVSAPRKQSDVPERSIPITREEKPAIAGAQRKMDITIHNPLIRRPLFFSPEELKVKVLGDMVEIHGKHEERQDEHGFIAREFNRKYRIPADVDPLTITSSLSLDGVLTVSAPSRIFDQIFGEHLQESELLPASPSLSPFLMRSPIFRMPSWLETGLSEMRLEKDKFSVNLDVKHFSPEELKVKVLGDMVEIHGKHEERQDEHGFIAREFNRKYRIPADVDPLTITSSLSLDGVLTVSAPRKQSDVPERSIPITREEKPAIAGAQRKMDITIHNPLIRRPLFFSPEE

SWLAPSRIFDQIFGEHLQESELLPASPSLSPFLMRSPIFRMPSWLETGLSEMRLEKDKFSVNLDVKHFSPEELKVKVLGDMVEIHGKHEERQDEHGFIAREFNRKYRIPADVDPLTITSSLSLDGVLTVSAPRKQDVPERSIPITREEKPAIAGAQRIFGEHLQESELLPASPSLSPFLMRSPIFRMPSWLETGLSEMRLEKDKFSVNLDVKHFSPEELKVKVLGDMVEIHGKHEERQDEHGFIAREFNRKYRIPADVDPLTITSSLSLDGVLTVKFGEHLQESELLPASPSLSPFLMRSPIFRMPSWLETGLSEMRLEKDKFSVNLDVKHFSPEELKVKVLGDMVEIHGKHEERQDEHGFIAREFNRKYRIPADVDPLTITSSLSLDGVLTVSAPRKQDVP

각 시퀀스는 행으로 표시됩니다. 각 줄을 80자 미만의 줄 집합으로 처리하고 싶습니다. 길이가 80자 미만이 되도록 각 줄을 그룹으로 그룹화하려면 어떻게 해야 합니까?

답변1

솔루션이 작동하고 단순화할 수 있으며 출력을 저장하고 피드백을 제공할 수 있습니다.

$ sed -r 's/(.{79})/\1\n/g' output.txt | tee output2.txt
  • sed이 명령은 이미 file과 같은 인수를 허용할 수 있으므로 output.txt"고양이 잔인함"으로 간주되는 것을 피할 수 있습니다. :)
  • tee출력을 보고 작성하여 피드백 형식을 제공할 수 있습니다. 그렇지 않으면 대용량 파일에서 한동안 화면에 아무 일도 일어나지 않는 것처럼 보이므로 항상 피드백을 받는 것이 좋습니다.

답변2

누군가 인용하는 이유는 무엇입니까 fold?

fold infile > outfile

매뉴얼 페이지에서:

NAME
       fold - wrap each input line to fit in specified width

SYNOPSIS
       fold [OPTION]... [FILE]...

-w를 사용하여 기본값인 80을 재정의합니다.

답변3

데이터 파일이 있고 data.txt파일로 출력하려면 sed를 사용하십시오 broken.txt.

sed -n 'l 80' data.txt | sed 's/\$\|\\//' > broken.txt

파이프라인의 첫 번째 부분에서는 각 줄의 길이를 80자로 만듭니다. 그러나 sed의 이 편리한 명령은 "명시적" 형식으로 텍스트를 출력합니다. 즉, 이제 개행 문자는 $s가 되고 sed가 입력한 개행 문자는 s로 렌더링됩니다 \. 따라서 파이프라인의 두 번째 부분은 이를 제거하는 것입니다.

\이 솔루션은 data.txt에 s 또는 가 없다고 가정합니다 .$

답변4

\이와 같이 줄을 분할할 때 줄의 끝이나 줄의 시작 부분을 문자로 표시하여 줄이 분할되었음을(그리고 하나의 줄로 취급/사용/읽기 위한 의도임) 나타내는 것이 매우 일반적입니다. 공백(예: 2개의 공백 문자) 또는 둘 다를 사용하여 줄을 구분합니다.

다음 sed 스크립트는 두 가지를 모두 수행하며 각 줄이 79자보다 넓을 수 없도록 보장합니다(따라서 80열 터미널이나 프린터에 표시하기에 적합함).

sed -r 's/(.{75})/\1 \\\n  /g' geneseq.txt

이렇게 하면 어떤 라인을 연결해야 하는지 시각적으로 더 명확해질 뿐만 아니라 나중에 추가로 처리해야 할 경우 출력을 더 쉽게 재사용할 수 있습니다.

관련 정보