연속된 시퀀스가 있고 200자마다 \n 및 >를 추가하여 그룹을 구분하고 싶습니다. 나는 sed와 awk를 사용하는 것이 도움이 될 것이라고 생각하지만 나는 이것에 익숙하지 않습니다.
이것이 내 입력이 될 것입니다:
ATACAGTTGGGTTTGGTTGGATCTTCGTCGGTATTTTTATTGGGTTAATTCTCTGGTTTTTCATCAACCGCGCCAGCGTCAGAGCGAACAGGCAGGTTGAATTACTTGAGTCTATCGACCAGAAATTATCAAAAATAGTAGATCCAAACTTCGAGGCAAATAACAAAGACCAGTCGAAAGAAAACTACCTTGAAGAAGCATGGGAAAACAGCATTCAGCGGTGGCTTATTCCTGCTAAGGATGTTGGCCGCATTCATGCTGAGCACAACCTCGACGGCCTGCTGAGGGGCGATTCGGCATCCCGCGCTGCCTTTATGAAGGCAATGGGAGAGGCAGGGCTACGCACCATCAACGAGATGCGACGAACGGACAACCTCCCGCCATTGCCGGGTGGCGATGTGAAATGGGAACCGCGAACATGCCTGCACATCCGTTTGTGCGACCCGCTTACGATACTCGCGAGGAAGAGGCCGCCAGCGTCGCCATTGCCAGGATGAATCAGGCTATTGATGAGGTATTGAGCAAGTGAATGAAGATAATATCTACGCCTTGCTTTCTCCCCTGGCAGAAGGACGGGTATATCCCTATGTTGCGCCATTA
이것은 내 예상 결과입니다(> 쉼표 제외).
>1
ATACAGTTGGGTTTGGTTGGATCTTCGTCGGTATTTTTATTGGGTTAATTCTCTGGTTTTTCATCAACCGCGCCAGCGTCAGAGCGAACAGGCAGGTTGAATTACTTGAGTCTATCGACCAGAAATTATCAAAAATAGTAGATCCAAACTTCGAGGCAAATAACAAAGACCAGTCGAAAGAAAACTACCTTGAAGAAGCA
>2
TGGGAAAACAGCATTCAGCGGTGGCTTATTCCTGCTAAGGATGTTGGCCGCATTCATGCTGAGCACAACCTCGACGGCCTGCTGAGGGGCGATTCGGCATCCCGCGCTGCCTTTATGAAGGCAATGGGAGAGGCAGGGCTACGCACCATCAACGAGATGCGACGAACGGACAACCTCCCGCCATTGCCGGGTGGCGATGT
>3
GAAATGGGAACCGCGAACATGCCTGCACATCCGTTTGTGCGACCCGCTTACGATACTCGCGAGGAAGAGGCCGCCAGCGTCGCCATTGCCAGGATGAATCAGGCTATTGATGAGGTATTGAGCAAGTGAATGAAGATAATATCTACGCCTTGCTTTCTCCCCTGGCAGAAGGACGGGTATATCCCTATGTTGCGCCATTA
어떤 제안이 있으십니까? 미리 감사드립니다
ㅏ.
답변1
perl
RS를 \200으로 초기화하여 한 번에 200바이트를 읽을 수 있습니다 . 파일에 바이트와 동일한 문자가 있다고 가정합니다.
$ perl -ne '
BEGIN { $/ = \200; $\ = "\n" }
chop if /\n/;
last if /^$/;
++$k; print s/^/>$k\n/r;
' file
답변2
다중 문자 RS 및 RT에 GNU awk 사용:
$ awk -v RS='.{200}' 'RT{print ">" NR ORS RT}' file
>1
ATACAGTTGGGTTTGGTTGGATCTTCGTCGGTATTTTTATTGGGTTAATTCTCTGGTTTTTCATCAACCGCGCCAGCGTCAGAGCGAACAGGCAGGTTGAATTACTTGAGTCTATCGACCAGAAATTATCAAAAATAGTAGATCCAAACTTCGAGGCAAATAACAAAGACCAGTCGAAAGAAAACTACCTTGAAGAAGCA
>2
TGGGAAAACAGCATTCAGCGGTGGCTTATTCCTGCTAAGGATGTTGGCCGCATTCATGCTGAGCACAACCTCGACGGCCTGCTGAGGGGCGATTCGGCATCCCGCGCTGCCTTTATGAAGGCAATGGGAGAGGCAGGGCTACGCACCATCAACGAGATGCGACGAACGGACAACCTCCCGCCATTGCCGGGTGGCGATGT
>3
GAAATGGGAACCGCGAACATGCCTGCACATCCGTTTGTGCGACCCGCTTACGATACTCGCGAGGAAGAGGCCGCCAGCGTCGCCATTGCCAGGATGAATCAGGCTATTGATGAGGTATTGAGCAAGTGAATGAAGATAATATCTACGCCTTGCTTTCTCCCCTGGCAGAAGGACGGGTATATCCCTATGTTGCGCCATTA
답변3
잠재적으로 무거운 파서 및 정규식을 피할 수 있는 가능한 솔루션은 다음 파이프라인입니다. 이 파이프라인은 XSI 옵션과 함께 POSIX 기능만 사용하므로 모든 UNIX 시스템에서 작동해야 합니다.
tr -d '\n' | dd cbs=200 conv=unblock | nl -n ln | tr '\t' '\n' | paste -d '>\n' /dev/null - -
cat file |
예를 들어 파일을 저장하기 위해 명령을 앞에 추가하여 파일을 표준 입력으로 공급해야 합니다 file
.
이 명령은 후행 줄 바꿈을 제거하고 tr
, 줄을 200바이트 청크로 나누고, 데이터 왼쪽의 숫자를 탭으로 분리하고, 각 줄에 번호를 매기고, 다음 명령을 사용하여 줄 바꿈으로 대체하고, 앞에 문자를 추가하여 출력을 친숙하게 만듭니다. 숫자 paste
.>
답변4
GNU 사용 awk
:
awk -v FPAT='.{200}' '{ while(++num<=NF) print ">"num RS $num; }' infile
위 명령은 줄이 항상 모듈로 200인 경우에만 작동합니다. 그렇지 않고 그보다 작거나 같으면 나머지 문자를 인쇄해야 하거나 줄도 200자 미만인 경우에 작동합니다.
awk -v FPAT='.{200}' '{ while(++num<=NF) print ">"num RS $num; };
END{
if (length($0)%200)
print ">" num RS substr($0, int(length($0)/200)*200+1, length($0)%200);
}' infile