我正在尝试将包含超过 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'例如,要复制
oldfile
to的每 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 行号。