Как разделить большой файл?

Как я могу передать все файлы в list.txt, который похож

file1_1.txt
file1_2.txt
file1_3.txt
file1_4.txt

к split команда (существуют другие txt файлы в dir), и заставьте его возвратиться, части, пронумерованные как в (предположите, что file1_1.txt был бы разделен на блоки в 4 части),

file1_1_1.txt;
file1_1_2.txt;
file1_1_3.txt;
file1_1_4.txt 

и так далее....

5
задан 6 September 2017 в 00:03

3 ответа

Вот моя сырая острота:

awk-F''. '{3$ = 1$; распечатайте дюйм за 1$. "2$"3$"" _ "}' list.txt | разделение xargs-n2 - numeric-suffixes=1-n 4 - suffix-length=1 - дополнительный суффикс = ". txt"

Объяснение :

файл содержит записи:

file1_1.txt
file1_2.txt
file1_3.txt
file1_4.txt

Мы берем тех с awk, и использующий точку в качестве разделителя, создаем два списка столбцов

file1_1.txt file1_1_
file1_2.txt file1_2_
file1_3.txt file1_3_
file1_4.txt file1_4_

Затем, xargs, берет тот вывод, две записи на выполнение (-n2) и разделение выполнений с числовыми суффиксами, запускающимися в 1, разделенный на 4 файла, и добавьте ".txt" в конце. И вот демонстрация той остроты:

enter image description here

1
ответ дан 23 November 2019 в 08:55
while read file; do split <some options> "$file"; done < list.txt

, Если Ваши имена файлов могут содержать пробел или обратные косые черты, используйте это вместо этого:

while IFS= read -r file; do split <some options> "$file"; done < list.txt
2
ответ дан 23 November 2019 в 08:55

Чтобы не быть уверенными никакой разрыв строки, можно использовать другую опцию, чем c.

split -n #number

разделите файл блоками #number, таким образом, можно таким образом быть уверены, что они равны и больше никакого перерыва в строках. Пример

split -n 4 file.txt

Это разделит file.txt на 4 блока.

ИЛИ можно разделить количеством строк

split -l #number-of-lines

пример

split -l 200 file.txt

Это разделит file.txt на файлы, каждый - 200 строк. Но это не точно, что все имеют ту же длину начиная с последнего файла, возможно, меньше, чем то выбранное число.

Теперь относительно именования. Значение по умолчанию разделения команды должно использовать суффикс по умолчанию "x" и префиксы по умолчанию "aa" "ab" "ac"...

Таким образом, для изменения, они принимают значение по умолчанию, необходимо заявить суффикс для использования.

в Вашем случае можно использовать

split -n #number file1_1.txt file1_1.

Вывод был бы похож file1_1.aa file1_1.ab file1_1.ac

Еще можно изменить префикс по умолчанию, чтобы быть использованием numberic -d

  split -n #number -d file1_1.txt file1_1.

Вывод был бы похож file1_1.00 file1_1.01 file1_1.02

Таким образом, Вы не можете получить именование, Вы хотите с разделением по умолчанию, если Вы не используете некоторых awk или sed с REGEX.

Теперь для чтения набора файлов из файла позволяет названный files.list

while IFS= read -r file

do split -n #number -d "$file" "$file"

done < files.list

ОБНОВЛЕНИЕ: Я приехал в этот https://unix.stackexchange.com/questions/32626/split-a-file-by-line-and-have-control-over-resulting-files-extension

Согласно второму ответу

последние версии (≥ 8.16) гну разделяют, можно использовать - дополнительный суффикс переключается для управления получающимся расширением. От разделения человека:

- additional-suffix=SUFFIX добавьте дополнительный СУФФИКС к именам файлов. таким образом, при использовании той опции:

слова-dl 10000 --additional-suffix=.txt разделения wrd получающиеся части автоматически закончатся в .txt:

wrd00.txt wrd01.txt

Таким образом в Вашем случае, если Ваша версия разделения> 8.16 затем, можно сделать потребность как это

split -n #number -d --additional-suffix=.txt file1_1.txt file1_1-

Таким образом вывод был бы похож

file1_1-00.txt file1_1-01.txt file1_1-02.txt .....
6
ответ дан 23 November 2019 в 08:55

Другие вопросы по тегам:

Похожие вопросы: