다음과 같은 유전자 서열이 포함된 파일이 있습니다.
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
이렇게 하면 어떤 라인을 연결해야 하는지 시각적으로 더 명확해질 뿐만 아니라 나중에 추가로 처리해야 할 경우 출력을 더 쉽게 재사용할 수 있습니다.