Использование sed для разделения файла по последовательности. удар - PullRequest
2 голосов
/ 26 мая 2019

Я хочу разрезать файл размером 211 548 559 строк на 10 файлов меньшего размера.Итак, первый файл, например, будет иметь 1-ю до 21154856-й строки

Я хотел бы написать цикл for с последовательностью, которая позволяет мне автоматизировать процесс.

Я пытался создатьсначала функция, а затем цикл с последовательностью.

run_sed(){
    sed -n $1p Bar08_depth_chr1.txt > Bar8_d_c1_$1.txt
}
for pos in seq 1 10 211548559
do
    run_sed $pos
done

Этот скрипт не работал.Я верю, потому что 1 доллар в sed -n 1$p Но я не знаю, как решить

1 Ответ

2 голосов
/ 27 мая 2019

Для GNU split:

split -nl/10 --additional-suffix=.txt -d Bar08_depth_chr1.txt Bar8_d_c1_

, который создаст 10 файлов с именами от Bar8_d_c1_00.txt до Bar8_d_c1_09.txt, которые, вероятно, не нужно будет переименовывать.

Для split под MacOS:

split -l $(( (211548559 - 9) / 10 )) Bar08_depth_chr1.txt Bar8_d_c1_

, который создаст 10 файлов с именами от Bar8_d_c1_aa до Bar8_d_c1_aj, которые можно переименовать в нужный вам шаблон имени.

Показанный расчет приводит к округлению количества строк в файле, чтобы избежать очень маленького 11-го файла.

...