Разделение нескольких входных файлов на несколько выходов с использованием Split Function в Linux -- bash поле с участием loops поле с участием for-loop поле с участием split поле с участием vcf-variant-call-format пол Связанный проблема

Splitting multiple input files into multiple outputs using split function in linux


-1
vote

проблема

русский

У меня есть 8 файлов, которые я хотел бы разделить на 5 кусочков на файл. Обычно я бы делал это индивидуально, но хотел бы запустить это как петлю. Я работаю в HPC.

Я создал список имен файлов и пометил его "variantlist.txt". Мой код:

 <код> for f in 'cat variantlist.txt'; do split ${f} -n 5 -d; done    

Тем не менее, он только разделяет последний файл в файле VariantList.txt, выводит 5 кусков только от окончательной записи только.

Даже если я перечисляю файлы индивидуально:

 <код> for f in chr001.vcf chr002 ...chr008.vcf ; do split ${f} -n 5 -d; done   

Это все еще только разделяет последний файл на 5 кусочков.

Не уверен, где я пойду не так. Желаемый выход будет 40 кусков, 5 на хромосому. Ваша помощь будет очень оценена.

Большое спасибо

Английский оригинал

I have 8 files I would like to split into 5 chunks per file. I would normally do this individually but would like to run this as a loop. I work within a HPC.

I have created a list of the file names and labelled it "variantlist.txt". My code is:

for f in 'cat variantlist.txt'; do split ${f} -n 5 -d; done  

However, it only splits the final file in the variantlist.txt file outputting 5 chunks from the final entry only.

Even if I list the files individually:

for f in chr001.vcf chr002 ...chr008.vcf ; do split ${f} -n 5 -d; done 

It still only splits the final file into 5 chunks.

Not sure where I am going wrong here. The desired output would be 40 chunks, 5 per chromosome. Your help would be greatly appreciated.

Many thanks

</div
              
     
     

Список ответов

1
 
vote
vote
Лучший ответ
 

Разделение создает тот же набор файлов каждый раз и перезаписывать предыдущие. Вот один способ справиться с этим -

 <код> for f in $(<variantlist.txt)  # don't use cat do  mkdir -p $f.split         # make a subdir for the files     ( cd $f.split &&          # change into the subdir only in a subshell       split ../$f -n 5 -d     # split from there     )                         # close the subshell, parent still in base dir done   

или вы могли бы просто сделать это -

 <код> while read f             # grab each filename do split $f -n 5 -d      # split it    for x in x??          # for each split file    do mv $x $f.$x        # rename it to include the parent file name    done done < variantlist.txt   # take names from this file   
<Р> Это намного медленнее, но не использует подкаталоги.

Мой любимый, хотя -

 <код> xargs -I {} split {} -n 5 -d {} < variantlist.txt   

Последний Arg становится префиксом для split вместо по умолчанию <код> x .

Редактировать - 2 миллиарда строк на файл, используйте этот:

 <код> for f in $(<variantlist.txt) do split "$f" -d -n 5 "$f" & # run all in background at the same time done   
 

The split is creating the same set of files each time and overwriting the previous ones. Here's one way to handle that -

for f in $(<variantlist.txt)  # don't use cat do  mkdir -p $f.split         # make a subdir for the files     ( cd $f.split &&          # change into the subdir only in a subshell       split ../$f -n 5 -d     # split from there     )                         # close the subshell, parent still in base dir done 

Or you could just do this -

while read f             # grab each filename do split $f -n 5 -d      # split it    for x in x??          # for each split file    do mv $x $f.$x        # rename it to include the parent file name    done done < variantlist.txt   # take names from this file 

This is a lot slower, but doesn't use subdirs.

My favorite, though -

xargs -I {} split {} -n 5 -d {} < variantlist.txt 

The last arg becomes the PREFIX for split instead of the default of x.

EDIT -- with 2 billion lines per file, use this one:

for f in $(<variantlist.txt) do split "$f" -d -n 5 "$f" & # run all in background at the same time done 
</div
 
 
         
         
1
 
vote

При использовании <Код> split <Код> -n Swicth определит количество выходных файлов, что Оригинал разделен в ...

Вам нужен <код> -l для количества строк, которые вам нужны, 5 в вашем случае:

 <код>  split -l 5 ${f}   
 

When using split the -n swicth will determine the number of output files that the orinal is split into...

You need -l for the number of lines you need, 5 in your case:

 split -l 5 ${f} 
</div
 
 
   
   

Связанный проблема

19  MD5 Все файлы в каталоге дерева  ( Md5 all files in a directory tree ) 
У меня есть каталог со структурой, как так: <код> . ├── Test.txt ├── Test1 │   ├── Test1.txt │   ├── Test1_copy.txt │   └── Test1a │   ├── Test1a.txt │ ...

1954  Как изменить выходной цвет echo в Linux  ( How to change the output color of echo in linux ) 
Я пытаюсь распечатать текст в терминале, используя команду echo. Я хочу распечатать текст в красном цвете. Как я могу это сделать? ...

0  Вложенный во время петли в скрипте Bash - внутреннее пропущенное  ( Nested while loop in bash script inner being skipped ) 
Я попробовал читать на этом, но не могу найти что-то, что исправляет мою проблему .. Проблема: у меня есть вложенный пока цикл, а внутренний пропускается полн...

-1  В чем разница между PS | WC и PS R | WC в Linux?  ( Whats the difference between ps wc and ps r wc in linux ) 
Я пытаюсь выяснить, в чем разница между <код> ps | wc и <код> ps r | wc ...

263  Как я могу преобразовать вкладки в пробелы в каждом файле каталога?  ( How can i convert tabs to spaces in every file of a directory ) 
Как я могу преобразовать вкладки в пробелы в каждом файле каталога (возможно, рекурсивно)? Также есть способ установить количество пробелов на вкладку? ...

4  Bash Check Если пользовательский ключ не удается  ( Bash check if user mount fails ) 
Я пишу скрипт для передачи некоторых файлов на SFTP. Я хотел сделать передачу как локальную передачу, установив каталог с SSHFS, потому что он делает создание...

2  Команда Tesseract Unicharset_Extractor не найден  ( Tesseract unicharset extractor command not found ) 
Моя проблема Бег <код> unicharset_extractor и получение: Unicharset_Extractor: не найдено команду Моя среда <код> OSX El Capitan Version 10.11....

20  Переименование набора файлов до 001, 002, ... на Linux  ( Renaming a set of files to 001 002 on linux ) 
Я изначально имел набор изображений формы Image_001.jpg, image_002.jpg, ... Я прошел через них и удалил несколько. Теперь я хотел бы переименовать оставшиес...

2  Запустите скрипт оболочки внутри контейнера  ( Run shell script inside a container ) 
Я использую lemonlatte / docker-webvirtmgr в качестве базового файла, но проблема в том, что нет ключей SSH, настроенных для пользователя www-data, поэтому я ...

0  За петлю в Bash просто работает один раз  ( For loop in bash just runs once ) 
Я делаю проверку разрешения в Bash, но этот цикл просто работает один раз и заканчивается без ошибки: <код> for file in *; do WIDTH = $(identify -ping -f...

1  Цикл всеобъемлющий с 0,5  ( Loop increasement with 0 5 ) 
У меня есть цикл, который пишет в файл, но я хочу написать каждое значение 0,5 в файл. Я пробовал с <код> let count+=0.5 , но это не сработало как-то. Это воз...

94  Автозаполнение Bash в Emacs Shell-Mode  ( Bash autocompletion in emacs shell mode ) 
в терминале GNOME, Bash делает Smart Auto-завершение. Например <код> apt-get in<TAB> становится <код> apt-get install в режиме Emacs Shell-mode, э...

1  Как мне запустить команду во всех файлах в папке (которая имеет подпункты), используя exiftool?  ( How do i run a command on all files in a folder which has sub folders using ex ) 
У меня есть папка, называемая фотографии & amp; Видео . У него есть папки для различных лет, для которых у меня есть фотографии и видео. В течение года пап...

0  Как несколько пользователей могут использовать ту же иерархию каталога для выполнения операций GIT?  ( How can multiple users use the same directory hierarchy for doing git operations ) 
У меня есть .git / config файл, который имеет несколько пользователей, определенных как: <код> [user] name=user1 email=user1@domain.com name=u...

0  Отличитель B / W ls -la и ls -la> ls-1.txt  ( Difference b w ls la and ls la ls 1 txt ) 
Если я сделаю ls -la, я получаю такие результаты, как <код> total 16 drwxr-xr-x 4 rockse staff 136 Apr 28 16:55 . drwx------+ 23 rockse staff 782 Apr ...




© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.