头部的反面是什么?我想要除文件的前N行以外的所有行

时间:2010-08-18 00:20:08

标签: command-line scripting tail unix-head

鉴于长度未知的文本文件,我如何阅读,例如所有文件的前两行?我知道tail会给我最后N行,但我不知道N是提前的。

所以对于文件

AAAA
BBBB
CCCC
DDDD
EEEE

我想要

CCCC
DDDD
EEEE

对于文件

AAAA
BBBB
CCCC

我只是

CCCC

8 个答案:

答案 0 :(得分:180)

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应该为您提供所需的输出(从第3行开始)。

答案 1 :(得分:18)

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

tail -n +3

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

答案 2 :(得分:12)

使用awk的简单解决方案:

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

答案 3 :(得分:7)

试试sed 1,2d。根据需要替换2。

答案 4 :(得分:5)

tail -n +linecount filename将在linecount的第filename行开始输出,因此tail -n +3 filename 应该做你想做的事。

答案 5 :(得分:0)

使用此选项,假设第一个样本名为sample1.dat,然后是tail --lines=3 sample1.dat,它将打印从第3行到最后一行的所有行。

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

答案 6 :(得分:0)

我真的不知道如何从尾巴或头部开始,但在wc -l(行计数)和bash表达式的帮助下,你可以实现这一点。

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

希望这有帮助。

答案 7 :(得分:-1)

使用awk获取除最后2行之外的所有内容

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

获取除前2行之外的所有内容

awk 'NR>2' file

或者你可以使用更多

more +2 file

或只是bash

#!/bin/bash

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