2010-06-06 104 views
0

我需要按給定規則逐行解析文件。基於規則的文件解析

這是一個要求。

文件可以有多個行具有不同數據..

01200344545143554145556524341232131 
1120034454514355414555652434123213101200344545143554145556524341232131 
2120034454514 

和規則可以是這樣的。

  • 如果字節[0,1] == 「0」,則提取此行/tmp/record0.dat
  • 如果字節[0,1] == 「1」,則提取此行/ TMP/record1.dat
  • 如果字節[0,1] ==「2」,然後提取該行/tmp/record2.dat

我要找任何語言可以在快速做到這一點方式與一個非常長的文件大小像> 2 GB。

提前感謝所有幫助。

感謝

+0

就個人而言,我會做的代碼。我沒有你所有的規則,但我看到了一個模式,這將使它微不足道。 – 2010-06-06 02:23:58

+0

如果你所有的規則都是這樣,我認爲你應該關注I/O效率。 – 2010-06-06 02:34:06

+0

您的文件是二進制還是包含純文本數據? – Behrang 2010-06-06 03:48:08

回答

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可能正確使用單詞「probable」 – 2010-06-06 04:29:00

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「}'是否有效? – 2010-06-06 03:26:43

+0

@belisarius:是的,它的確如此。 – 2010-06-06 04:06:02

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