基于规则的文件解析

时间:2010-06-06 02:17:45

标签: java ruby awk

我需要在给定规则上逐行解析文件。

这是一项要求。

文件可以包含多行不同的数据..

01200344545143554145556524341232131
1120034454514355414555652434123213101200344545143554145556524341232131
2120034454514

和规则可以是这样的。

  • if byte [0,1] ==“0”然后将此行提取到/tmp/record0.dat
  • if byte [0,1] ==“1”然后将此行提取到/tmp/record1.dat
  • if byte [0,1] ==“2”然后将此行提取到/tmp/record2.dat

我正在寻找能够以非常长的文件大小(例如> 2 GB)快速执行此操作的任何语言。

提前感谢所有帮助。

由于

3 个答案:

答案 0 :(得分:3)

它不会出现在您的代码列表中,但我会使用:

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

你也可以用其他语言来做,但为了简洁和可能的正确性,在这种情况下,sed很难被击败。

答案 1 :(得分:2)

无论第一个字符的值如何,这都可以工作,因此无需添加更多规则即可进行扩展:

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

答案 2 :(得分:0)

awk -vFS= 'NF{print $0>"/tmp/record"$1".dat"}' file