将大文件中的每第 N 行打印到新文件中

将大文件中的每第 N 行打印到新文件中

我正在尝试将包含超过 300,000 条记录的文件中的每第 N 行打印到一个新文件中。每第 N 条记录都必须执行此操作,直到到达文件末尾。

答案1

awk 'NR % 5 == 0' input > output

每五行打印一次。

要使用环境变量:

NUM=5
awk -v NUM=$NUM 'NR % NUM == 0' input > output

答案2

打印每一个  第三行,使用

sed -n'0~p'
例如,要复制oldfileto的每 5 行newfile,请执行以下操作

sed -n '0~5p' oldfile > newfile

这使用的sed第一的地址形式,这意味着“匹配每一个'以 line 开头的行第一的”。理论上,这将打印第 0, 5, 10, 15, 20, 25, … 行,直到文件末尾。当然没有第 0 行,所以它只打印第 5, 10, 20, 25, … 行;  0~5只是一种方便的替代说法5~5 (从第 5 行开始每 5 行打印一次;即第 5、10、15、20、25 行……)。

对于此sed功能的另一个示例(未回答问题),

sed -n '2~5p' oldfile

将打印第 2, 7, 12, 17, 22, 27, … 行,直到文件末尾。

注意:此方法需要 GNU sed,因为第一的地址形式是不可移植的扩展。 (某些旧版本的 GNU sed 可能需要该5~5形式,而不是该 0~5 形式。)

答案3

这是 perl 版本:

perl -ne 'print if $. % 5 == 0;' infile > outfile

答案4

与 sed 类似,我们也有 awk:

$ seq 1000000000 |awk 'NR==500000{print;exit}'
500000

NR=您要打印的行数(然后退出以避免等待文件完成)。在你的情况下

awk 'NR==Nth{print;exit}' inputfile >outputfile

其中 Nth 是您需要打印的第 N 行号。

相关内容