【发布时间】:2013-02-20 11:43:53
【问题描述】:
我有一个大于 4gb 的文件,这对我来说是个坏消息,因为我无法在 notepad++ 中打开该文件并使用宏功能来记录和重复一个过程到文件末尾。 我想做的是,保留前 20 行文本,然后删除接下来的 80 行,然后重复该过程直到文件末尾。
最简单的方法是什么? 我正在Linux服务器上查看这些文件,因此运行某种脚本将是最简单的方法,或者也许有人知道在vi中执行此操作的方法? (因此是蹩脚的标签)
提前致谢
【问题讨论】:
我有一个大于 4gb 的文件,这对我来说是个坏消息,因为我无法在 notepad++ 中打开该文件并使用宏功能来记录和重复一个过程到文件末尾。 我想做的是,保留前 20 行文本,然后删除接下来的 80 行,然后重复该过程直到文件末尾。
最简单的方法是什么? 我正在Linux服务器上查看这些文件,因此运行某种脚本将是最简单的方法,或者也许有人知道在vi中执行此操作的方法? (因此是蹩脚的标签)
提前致谢
【问题讨论】:
awk 可以很容易地做到这一点:
awk '(NR-1)%100 < 20' bigfile.txt
【讨论】:
NR%100 <= 20 会保留它。
awk '(NR-1)%100 < 20' bigfile.txt >shorter.txt
我会选择 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
【讨论】:
#1,#101,#201,#301....#2,#102,#202.... #20,#120,#220.. 吗?