2010-06-06 3 views
0

Мне нужно разобрать файл по строкам по заданным правилам.синтаксический анализ на основе правил

Это требование.

файл может иметь несколько строк с разными данными ..

01200344545143554145556524341232131 
1120034454514355414555652434123213101200344545143554145556524341232131 
2120034454514 

и правила могут быть.

  • , если байт [0,1] == "0", а затем извлечь эту строку в /tmp/record0.dat
  • , если байт [0,1] == "1", а затем извлечь эту строку/TMP/record1.dat
  • если байты [0,1] == «2», а затем извлечь эту строку /tmp/record2.dat

Я ищу для любого языка, который может сделать это в быстром с очень длинным размером файла, например> 2 ГБ.

Цените всю помощь заранее.

Благодаря

+0

Лично я хотел бы сделать это в коде. У меня нет всех ваших правил, но я вижу шаблон, который сделает его тривиальным. –

+0

Если все ваши правила подобны, я считаю, что вам следует сосредоточиться на эффективности ввода-вывода. –

+0

Является ли ваш файл двоичным или содержит простые текстовые данные? – Behrang

ответ

3

Он не появляется в списке тегов, но я хотел бы использовать:

sed -n -e '/^0/w /tmp/record0.dat' \ 
     -e '/^1/w /tmp/record1.dat' \ 
     -e '/^2/w /tmp/record2.dat' "[email protected]" 

Вы также можете сделать это на других языках, но для краткости и вероятной правильности, в этом случае sed сложно обыграть.

+0

+1 Для вероятного правильного использования слова «вероятный» –

2

Это будет работать независимо от значения первого символа, так что весы без добавления правил:

awk '{c=substr($0,0,1); print $0 > "/tmp/record" c ".dat"}' inputfile.dat 
+0

+1 ... «Работает ли« {print> "/ tmp/record" substr ($ 0,0,1) ".dat"}? –

+0

@belisarius: да, это так. –

Смежные вопросы