2013-03-18 47 views
1

我有一個包含~80,000行的文件有問題。這是一個23Gb的大文件。我設法該尺寸的使用下面的命令塊了類似的文件:很長的行導致問題

awk '{fn = NR % 24; print > ("file1_" fn)}' file1 

然而,在這一個問題的文件該命令攤位。問題文件確實有一個非常大的30億字符(其他文件中最長的行少於10億),我猜這是問題所在。

我想擺脫文件中的這一長長的行,然後繼續,但這證明是困難的。我雖然簡單地使用以下將工作

awk 'length < 1000000000' file1 > file2 

但是,這也仍然運行後3.5小時。是否有一種快速瀏覽文件的方法,當一行中的字符數超過了10億,它會停止計數並移動到下一行?

+0

我對這個問題一無所知('我認爲使用c作爲答案),但它聽起來很有趣。 – 2013-03-18 11:03:52

+0

您使用的是什麼版本的awk('awk --version')?也許GNU awk(gawk)的更新版本就是你所需要的。 – 2013-03-18 13:08:42

+0

這是GNU Awk 3.1.5 – user1308144 2013-03-18 13:12:02

回答

1

也許你可以嘗試將兩個awk行組合成一個命令,它可能會更快。因爲它只處理你的怪物文件一次。但是你必須測試。

awk '{fn = NR % 24; if(length< 1000000000) print > ("file1_" fn)}' file1 
0

嘗試使用SED刪除超過一定數目的字符更長的線

# delete lines longer than 65 characters 
sed '/^.\{65\}/d' file 

您也可以使用2步法:

# use sed to output the line numbers containing lines 
# longer than a certain number of characters 
sed -n '/^.\{65\}/=' file 

,然後使用該列表在awk中構建一個跳過列表,即如果NR等於這些數字中的任何一個,則跳過該行。