Как разделить stdout для движения в несколько выходных файлов?

Моим первым предложением были бы Максимумы, но кажется, что я устарел. Википедия перечисляет несколько:

Аксиома, Cadabra, CoCoA, DoCon, Eigenmath, FriCAS, GAP, GiNaC, Macaulay2, Mathomatic, Максимумы, OpenAxiom, PARI/GP, Уменьшает, Мудрый, ИСКЛЮЧИТЕЛЬНЫЙ, SymPy, Xcas

Это также имеет сравнение компьютерных систем алгебры.

12
18.06.2014, 10:41
2 ответа

После того как Вы сделаны, сохранив файл, Вы всегда могли split файл в части файла или несколько файлов на основе количества строк.

split -l 1000 output_file

или еще лучше просто попробуйте

command | split -l 1000 -

Это разделит поток вывода на файлы с каждым 1 000 строк (значение по умолчанию является 1 000 строк без-l опции).

Ниже команды даст Вам дополнительную гибкость, чтобы поместить или осуществить префикс к имени файла, которое будет сгенерировано, когда вывод будет сгенерирован и splitted для хранения в файл.

command | split -l 1000 - small-

24
27.01.2020, 19:54
  • 1
    я запутался, таким образом, для других, split [arguments...] [input e.g. "-" for stdin] [output_prefix], например: tar -c somedir | split --byes 100MB --numeric-suffixes --suffix-length=3 - somedir.tar.part- произвел бы набор названных файлов 100 МБ somedir.tar.part-000, 001, 002 ответа –  ThorSummoner 17.08.2017, 22:47

Можно использовать сценарий удара lines.bash

#!/bin/bash
a=0
while IFS='' read -r line
do
  printf -v filename "%04d.txt" "$((a++/1000))"
  echo "$line" >> $filename
done

и используйте его как:

cat long_file.txt | bash lines.bash

Единственная проблема, которую я заметил, с * войти long_file.txt (кто-то мог исправить его).

3
27.01.2020, 19:54
  • 1
    Установите IFS к пустой строке для предотвращения разделения слова на read. Использовать -r отключить выход обратной косой черты на read. Удалить -e избегать выхода обратной косой черты на echo. Используйте заключение в кавычки для предотвращения разделения слова на echo. Использовать -v в bash с тех пор 4.0, чтобы не запускать подпроцесс. Используйте постпостепенное увеличение, поскольку Ваш текущий код вставит первый файл только 999 строк. a=0; while IFS='' read -r line; do printf -v filename "%04d.txt" $((a++/1000)); echo "$line" >> "$filename"; done –  manatwork 06.12.2011, 16:09
  • 2
    @manatwork. Только мой printf не имеет -v переключатель. (bash 4.2.10). По крайней мере, это не находится в странице справочника printf –  xralf 06.12.2011, 16:21
  • 3
    man printf документы/usr/bin/printf, который никогда не мог в жизни устанавливать переменную среды. Посмотрите help printf для printf окружите созданную-in's документацию. –  manatwork 06.12.2011, 16:44
  • 4
    @manatwork OK. Кажется, существует синтаксическая ошибка в ++/ часть все же. –  xralf 06.12.2011, 16:48
  • 5
    Еще одна вещь: нет никакой потребности использовать символ в арифметической оценке, если Вам не нужно расширение параметра явно. В арифметическом расширении переменные оценены так или иначе. –  manatwork 06.12.2011, 16:49

Теги

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