Разбиение файла и его строк под Linux / bash - PullRequest
1 голос
/ 15 сентября 2008

У меня довольно большой файл (150 миллионов строк по 10 символов). Мне нужно разделить его на 150 файлов по 2 миллиона строк, причем каждая строка вывода поочередно представляет собой первые 5 символов или последние 5 символов строки источника. Я мог бы сделать это в Perl довольно быстро, но мне было интересно, есть ли простое решение с использованием bash. Есть идеи?

Ответы [ 3 ]

3 голосов
/ 15 сентября 2008

Домашнее задание? : -)

Я думаю, что простого канала с sed (для разделения каждой строки на две) и split (для разбиения нескольких файлов) будет достаточно.

Команда man - ваш друг.


Добавлено после подтверждения того, что это не домашняя работа:

Как насчет

sed 's/\(.....\)\(.....\)/\1\n\2/' input_file | split -l 2000000 - out-prefix-

0 голосов
/ 15 сентября 2008

Первые пять символов каждого варианта строки, предполагая, что большой файл называется x.txt, и предполагая, что можно создавать файлы в текущем каталоге с именами x.txt. *:

split -l 2000000 x.txt x.txt.out && (для splitfile в x.txt.out *; do outfile = "$ {splitfile} .firstfive"; echo "$ splitfile -> $ outfile"; cut -c 1-5 "$ splitfile"> "$ outfile"; готово)

0 голосов
/ 15 сентября 2008

Я думаю, что-то вроде этого может работать:

out_file=1
out_pairs=0
cat $in_file | while read line; do
    if [ $out_pairs -gt 1000000 ]; then
        out_file=$(($out_file + 1))
        out_pairs=0
    fi
    echo "${line%?????}" >> out${out_file}
    echo "${line#?????}" >> out${out_file}
    out_pairs=$(($out_pairs + 1))
done

Не уверен, что это проще или эффективнее, чем использование Perl.

...