парсинг файлов на основе правил - PullRequest
0 голосов
/ 06 июня 2010

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

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

Файл

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

01200344545143554145556524341232131
1120034454514355414555652434123213101200344545143554145556524341232131
2120034454514

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

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

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

Заранее благодарен за всю помощь.

Спасибо

Ответы [ 3 ]

3 голосов
/ 06 июня 2010

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

sed -n -e '/^0/w /tmp/record0.dat' \
       -e '/^1/w /tmp/record1.dat' \
       -e '/^2/w /tmp/record2.dat' "$@"

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

2 голосов
/ 06 июня 2010

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

awk '{c=substr($0,0,1); print $0 > "/tmp/record" c ".dat"}' inputfile.dat
0 голосов
/ 07 июня 2010
awk -vFS= 'NF{print $0>"/tmp/record"$1".dat"}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...