LINUX.ORG.RU

Чем поделить большой файл на 2 части по достижении опред. строки?


0

0

Добрый день. Имеется текстовой файл на 350мб с кучей строк. Где-то на 60 мб встречается уникальная строка, содержащая 'bla-bla'

Вопрос: как можно поделить этот файл на 2 части - одна до строки, другая после. В какую часть включить строку с magic-word - не важно. Подскажите хитрую конструкцию.. (на перле, наверно, хотя не важно)

Так пойдет?

#!/bin/bash                                                                                                                                                                        

file1="out1.txt"
file2="out2.txt"
patern="foo"

outfile=$file1

while read line
do
    echo $line >> "$outfile"

    if [ "$line" == "$patern" ]
    then
        outfile=$file2
    fi
done;

urxvt ★★★★★
()
Ответ на: комментарий от urxvt

Ой, что-то я после вчерашнего дня рождения читать разучился. Вот вариант с грепом:


#!/bin/bash                                                                                                                                                                        

file1="out1.txt"
file2="out2.txt"
patern="bar"

outfile=$file1

while read line
do
    echo $line >> "$outfile"

    echo $line | grep -q "$patern"

    if [ $? -eq 0 ]
    then
        outfile=$file2
    fi
done;

urxvt ★★★★★
()
Ответ на: комментарий от urxvt

Спасибо. А как на баше исходный файл-то открыть в этом примере?

Запускал так: cat source | ./parse.sh но очень медленно идет...

silvuple
() автор топика
Ответ на: комментарий от sdio

sdio, то что надо! Очень быстро и удобно, сенкс!

silvuple
() автор топика

И еще один вопрос для гуру awk:

есть html таблица, ее надо в csv перевести.

Есть такой скрипт: BEGIN {s=""; FS="n"} /<td/ { gsub(/<[^>]*>/, ""); s=(s ", " $1);} /<tr|<TR/ { print s; s="" }

Но он работает только для таблиц вида: <tr> <td>145584</td> <td>ch</td> <td>Stu</td> </tr> <tr> <td>0</td> <td>456456</td> <td>456456</td> </tr>

А если она вида: <tr> <td> 145584 </td> <td> ch </td> <td> Stu </td> </tr>

etc то не работает.

Подскажите, гуру?

silvuple
() автор топика
Ответ на: комментарий от silvuple

сбилось форматирование, в общем, скрипт работает только если <td>145584</td> - в одну строку записаны, а если они идут как <td>\n145584\n</td>\n - т.е. в 3 строки записаны, то он не работает.

silvuple
() автор топика

Вдогонку ещё вариант:

Копирует из файла file.txt в файл start.txt первую половину, включая искомую строку:
sed -n '0,/bla-bla/p' file.txt > start.txt

То же, без искомой строки:
sed '/bla-bla/,$d' file.txt > start.txt

Копирует в end.txt вторую половину с искомой строкой:
sed -n '/bla-bla/,$p' file.txt > end.txt

То же, без строки:
sed '0,/bla-bla/d' file.txt > end.txt

question4 ★★★★★
()
Ответ на: комментарий от silvuple

а каким-то опенофисом открыть и сохранить в любом удобном формате - не?

Komintern ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.