대용량 파일을 고유한 파일 이름을 가진 새 파일로 분할

대용량 파일을 고유한 파일 이름을 가진 새 파일로 분할

파일을 고유한 파일 이름으로 분할해야 합니다. 예를 들어 명령을 사용하여 이 작업을 수행
할 수 있지만 시간이 많이 걸리므로 더 빠르게 수행할 수 있는 현명한 방법이 필요합니다. 다음은 입력 예입니다(원본 파일에는 백만 줄이 있습니다).sedsed -n '/scaffold135_/w 135-scaf.txt' input file.txt

scaffold1_115,T,N,N,N,N,A,N,N,N,N,N,N,T,N,T,T,N,A,A,N,N,A
scaffold1_123,A,N,N,N,N,G,N,N,N,N,N,N,A,N,A,A,N,G,G,N,N,G
scaffold1_140,C,N,N,N,N,C,N,N,N,N,N,N,C,N,C,C,N,T,C,N,N,C
scaffold2_161,G,N,N,N,N,G,N,C,N,N,C,N,G,N,G,G,N,G,G,C,N,G
scaffold2_162,C,N,N,N,N,C,N,T,N,N,T,N,C,N,C,C,N,C,C,T,N,C
scaffold2_180,C,N,N,N,N,C,N,T,N,N,C,C,C,T,C,C,T,C,C,C,N,C
scaffold2_194,C,N,N,C,N,C,C,C,C,C,C,C,C,C,T,C,C,C,C,C,N,C
scaffold3_195,G,N,N,G,G,C,G,G,G,G,G,G,C,G,C,G,G,C,C,G,N,C
scaffold3_234,T,N,A,T,A,A,T,T,T,A,T,A,A,T,A,A,T,A,A,T,N,A
scaffold101_282,C,T,T,T,C,C,T,C,T,C,C,C,C,T,C,C,T,C,C,C,N,C
scaffold101_371,T,T,T,T,T,C,T,T,T,T,T,T,T,T,T,T,T,T,T,T,N,C
scaffold101_372,T,T,T,T,C,C,T,T,T,T,T,T,T,T,T,T,T,T,T,T,N,C

라인이 독특해요. 각 특정 줄을 scafold별도의 파일에 넣고 싶습니다 . 예를 들어 scaffold1_이름이 지정된 파일 로 시작하는 모든 줄은 다음을 포함할 scaffold1.txt때까지 계속됩니다.scaffold10156.txtscaffold10156_

답변1

당신은 사용할 수 있어야합니다리디렉션그리고awk

awk -F'_' '{print > $1".txt"}' file

접두사를 공유하는 줄이 scaffoldn_연속적인 경우 열린 파일 핸들 제한을 위반하지 않도록 다음을 수행할 수 있습니다.

awk -F'_' 'NR == 1 || $1 != prev{if (f) close(f);f=$1".txt"; prev=$1}; 
{print > f};END{if (f) close(f)}' file

답변2

~을 위한GNU sed:

sed 's/scaffold\([0-9]*\)_.*/echo "&" >> "\1-scaf.txt"/e' infile

관련 정보