2013-03-05 64 views
2

我有一個大於4GB的文件,這對我來說是個壞消息,因爲我無法在記事本++中打開該文件,並使用宏功能記錄並重復一個進程文件的結尾。 我想要做的就是說,保留前20行文本,然後刪除下一個80行,然後將該過程重複到文件末尾。最簡單的方法刪除一段文字,n次

最簡單的方法是什麼? 我在linux服務器上查看這些文件,所以運行某種腳本將是最簡單的方法,或者也許有人知道在vi中這樣做的方法? (因此跛腳taging)

在此先感謝

回答

9

awk可以做到這一點很容易:

awk '(NR-1)%100 < 20' bigfile.txt 
+0

爲什麼你想出了首先用(NR-1)%100 <20但不NR%100 <= 20。 :) +1不錯的解決方案! – Kent 2013-03-05 21:42:10

+1

@Kent考慮第100行。我們想刪除它,但是'NR%100 <= 20'會保留它。 – Kevin 2013-03-05 21:43:27

+0

@凱文正確!沒有想到0的情況...^_^ – Kent 2013-03-05 21:47:59

2

我會去的awk的解決方案,但這裏是你可以做同樣的事情的一種方式SED:

seq 20 | sed 's/$/~100p/' | sed -nf - bigfile.txt 

測試:

seq 20 | sed 's/$/~100p/' | sed -nf - <(seq 200) 

輸出:

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110 
111 
112 
113 
114 
115 
116 
117 
118 
119 
120 
+0

我沒有測試,只是想知道,這會是什麼輸出順序線?它會成爲'#1,#101,#201,#301 ....#2,#102,#202 ....#20,#120,#220 ..'嗎? – Kent 2013-03-05 21:46:20

+0

@Kent:我添加了一個顯示輸出順序的測試。 – Thor 2013-03-05 22:21:39

+0

謝謝。 。 。 。! – Kent 2013-03-05 22:27:21

相關問題