다음과 같은 염색체 파일이 있습니다.
JH739887 1 30495534
JH739888 1 29527584
JH739889 1 22321128
JH739890 1 19792264
JH739891 1 19033121
JH739892 1 17022292
[...]
테스트 파일은 다음과 같이 생성될 수 있습니다.
cd ~/Desktop/
printf "JH%06d \t 1 \t 100 \n" {1..27239} > test_lotsoflines.txt
27239개의 라인이 있지만 약 2724개의 라인을 포함하는 10개의 파일을 갖고 싶습니다(이렇게 하면 병렬 명령이 작동하게 됩니다).
원본 파일의 1~2724행을 새 파일로 출력할 수 있었습니다.
sed -n -e '1,2724p' ${REFGENO}/geoFor1.chrom.start.stop.sizes > ~/Desktop/output.txt
wc -l ~/Desktop/output.txt
2724 ~/Desktop/output.txt
하지만 이제 파일 끝(27239행)에 도달할 때까지 2725행에서 5448행으로 증가하고 새 파일로 출력하고 싶습니다 output##.txt
.
output01.txt 2724 lines
output02.txt 2724 lines
[...]
output10.txt 2723 lines
나는 다음을 사용하여 printf "output%02d.txt\n"
##.txt 출력을 얻을 생각입니다.
하지만 파일 수를 늘리는 방법은 무엇입니까?그리고10개의 파일을 생성하려면 파일에 몇 줄이 생성됩니까? 물론 원본 파일의 줄 수가 "0"으로 끝나지 않으므로 마지막 파일에는 2723줄이 있습니다.
사용할 수 있는 한 가지 접근 방식은 다음에서 제공된 솔루션을 사용하여 파일 이름을 업데이트하는 것입니다.Bash에서 문자열 끝의 숫자를 증가시키는 방법은 무엇입니까?:
updateVersion()
{
[[ $1 =~ ([^0-9]*)([0-9]+) ]] || { echo 'invalid input'; exit; }
echo "${BASH_REMATCH[1]}$(( ${BASH_REMATCH[2]} + 1 ))"
}
그런데 파일명과 확장자를 분리해야 하는데...
저는 Mac을 사용하고 있습니다: macOS Mojave 10.14.6.
답변1
이런 종류의 일이 바로 GNU Coreutils split
기능이 수행하도록 설계된 것입니다.
전임자. 접두사 , 접미사 및 증분 숫자를 file
사용하여 줄을 분할하지 않고 10개의 청크로 분할output
.txt
split -d -n l/10 --additional-suffix='.txt' file output