什么是头相反? 我只想要一个文件的前N行

给定一个长度不明的文本文件,我怎么读,例如文件的前两行除外? 我知道tail会给我最后的N行,但是我不知道N是什么时间。

所以对于一个文件

 AAAA BBBB CCCC DDDD EEEE 

我想要

 CCCC DDDD EEEE 

并为一个文件

 AAAA BBBB CCCC 

我会得到的

 CCCC 

tail --help帮助给出以下内容:

  -n, --lines=K output the last K lines, instead of the last 10; or use -n +K to output lines starting with the Kth 

所以要过滤掉前2行, -n +3应该给你你正在寻找的输出(从第三个开始)。

假设你的尾巴版本支持它,你可以指定在X行之后开始尾巴。 在你的情况下,你会做2 + 1。

 tail -n +3 [mdemaria@oblivion ~]$ tail -n +3 stack_overflow.txt CCCC DDDD EEEE 

使用awk的简单解决scheme:

 awk 'NR > 2 { print }' file.name 

试试sed 1,2d 。 根据需要replace2。

tail -n +linecount filename名将开始输出在filenamelinecount ,所以tail -n +3 filename应该做你想要的。

使用这个,假设第一个样本叫做sample1.dat,然后tail --lines=3 sample1.dat这将打印从第三行到最后一行的所有行。

对于第二个示例,再次假设它被称为sample2.dat它将是tail --lines=-1 sample2.dat这将打印最后一行…

我真的不知道如何从尾部或头部做到这一点,但在wc -l (行数)和bashexpression式的帮助下,您可以实现这一点。

 tail -$(( $( wc -l $FILE | grep -Eo '[0-9]+' ) - 2 )) $FILE 

希望这可以帮助。

用awk去除最后2行

 awk 'FNR==NR{n=FNR}FNR<=n-3{print}' file file 

awk得到所有,但前两行

 awk 'NR>2' file 

或者你可以使用更多

 more +2 file 

或只是bash

 #!/bin/bash i=0 while read -r line do [[ $i > 1 ]] && echo "$line" ((i++)) done <"file"