162

给定一个未知长度的文本文件,我如何阅读,例如除了文件的前 2 行之外的所有内容?我知道tail会给我最后的 N 行,但我不知道 N 是什么提前。

所以对于一个文件

AAAA
BBBB
CCCC
DDDD
EEEE

我想

CCCC
DDDD
EEEE

对于一个文件

AAAA
BBBB
CCCC

我会得到

CCCC
4

8 回答 8

248

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 行开始)。

于 2010-08-18T00:31:34.910 回答
27

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

tail -n +3

[mdemaria@oblivion ~]$ tail -n +3 stack_overflow.txt
CCCC
DDDD
EEEE
于 2010-08-18T00:31:53.680 回答
13

使用 awk 的简单解决方案:

awk 'NR > 2 { print }' file.name
于 2010-08-18T00:39:02.660 回答
10

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

于 2010-08-18T11:01:18.570 回答
6

tail -n +linecount filename将在行开始输出linecountfilename所以tail -n +3 filename 应该做你想做的事。

于 2010-08-18T00:30:47.127 回答
0

使用这个,假设第一个样本被称为 sample1.dat 那么tail --lines=3 sample1.dat它将打印从第 3 行到最后一行的所有行。

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

于 2010-08-18T00:30:45.523 回答
0

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

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

希望这可以帮助。

于 2010-08-18T00:33:03.253 回答
-1

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

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"
于 2010-08-18T00:54:49.223 回答