删除一段文本的最简单方法,n次

时间:2013-03-05 21:33:06

标签: bash shell vi

我有一个大于4gb的文件,这对我来说是个坏消息,因为我无法在记事本++中打开该文件,并使用宏功能记录并重复进程到文件的末尾。 我想要做的是,保留前20行文本,然后删除下一行80,然后将该过程重复到文件末尾。

最简单的方法是什么? 我在Linux服务器上查看这些文件,因此运行某种脚本是最简单的方法,或者有人知道在vi中执行此操作的方法吗? (因此是蹩脚的分娩)

提前致谢

2 个答案:

答案 0 :(得分:9)

awk可以相当轻松地完成此操作:

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

答案 1 :(得分: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