我试图将包含超过 300,000 条记录的文件中的每第 N 行打印到一个新文件中。这必须每第 N 个记录发生一次,直到它到达文件的末尾。
Dea*_*rip 69
awk 'NR % 5 == 0' input > output
Run Code Online (Sandbox Code Playgroud)
这将打印每五行。
要使用环境变量:
NUM=5
awk -v NUM=$NUM 'NR % NUM == 0' input > output
Run Code Online (Sandbox Code Playgroud)
G-M*_*ca' 28
要打印每N ?? 行,请使用
sed -n '0~ N p'例如,要每5日线复制
oldfile
到newfile
,做
sed -n '0~5p' oldfile > newfile
Run Code Online (Sandbox Code Playgroud)
这用sed
的第一个?〜步骤地址的形式,这意味着“匹配每一个步骤“个线路启动与线第一”。理论上,这会打印 line?0, 5, 10, 15, 20, 25, ...,直到文件末尾。当然没有 line?0,所以它只打印 line?5, 10, 20, 25, ...;?
0~5
只是一种方便的替代方式5~5
(从第 5 行开始打印每 5 行;即,第 5、10、15、20、25 行……)。
对于此sed
功能的另一个示例(未回答问题),
sed -n '2~5p' oldfile
Run Code Online (Sandbox Code Playgroud)
将打印行? 2, 7, 12, 17, 22, 27, ...,直到文件末尾。
注意:这种方法需要 GNU sed,作为第一个? ~步地址表是一个不可移植的扩展。(一些旧版本的 GNU sed 可能需要5~5
表格而不是 0~5
表格。)
与 sed 类似,我们也有 awk:
$ seq 1000000000 |awk 'NR==500000{print;exit}'
500000
Run Code Online (Sandbox Code Playgroud)
NR=您要打印的行数(然后退出以避免等待文件完成)。在你的情况下
awk 'NR==Nth{print;exit}' inputfile >outputfile
Run Code Online (Sandbox Code Playgroud)
其中 Nth 是您需要打印的第 N 行号。