头的反义词是什么?我想要文件中除前 N 行之外的所有行

发布于 2024-09-14 23:11:34 字数 309 浏览 4 评论 0原文

给定一个未知长度的文本文件,我如何读取文件的所有前两行?我知道 tail 会给我最后 N 行,但我不知道 N 提前是什么。

文件

AAAA
BBBB
CCCC
DDDD
EEEE

所以对于我想要的

CCCC
DDDD
EEEE

文件

AAAA
BBBB
CCCC

对于我想要的

CCCC

Given a text file of unknown length, how can I read, for example all but the first 2 lines of the file? I know tail will give me the last N lines, but I don't know what N is ahead of time.

So for a file

AAAA
BBBB
CCCC
DDDD
EEEE

I want

CCCC
DDDD
EEEE

And for a file

AAAA
BBBB
CCCC

I'd get just

CCCC

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

因为看清所以看轻 2024-09-21 23:11:34

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个开始):

tail -n +3

tail --help gives the following:

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

So to filter out the first 2 lines, -n +3 should give you the output you are looking for (start from 3rd):

tail -n +3
清泪尽 2024-09-21 23:11:34

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

tail -n +3

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

Assuming your version of tail supports it, you can specify starting the tail after X lines. In your case, you'd do 2+1.

tail -n +3

[mdemaria@oblivion ~]$ tail -n +3 stack_overflow.txt
CCCC
DDDD
EEEE
城歌 2024-09-21 23:11:34

使用 awk 的简单解决方案:

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

A simple solution using awk:

awk 'NR > 2 { print }' file.name
烟雨凡馨 2024-09-21 23:11:34

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

Try sed 1,2d. Replace 2 as needed.

灯下孤影 2024-09-21 23:11:34

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

tail -n +linecount filename will start output at line linecount of filename, so tail -n +3 filename
should do what you want.

假装不在乎 2024-09-21 23:11:34

使用此示例,假设第一个样本名为 Sample1.dat,然后 tail --lines=3 Sample1.dat 会打印从第三行到最后一行的所有行。

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

Use this, supposing the first sample is called sample1.dat then tail --lines=3 sample1.dat which would print all lines from the 3rd line to the last line.

For the second sample, again suppose it is called sample2.dat it would be tail --lines=-1 sample2.dat which would print the last line...

可是我不能没有你 2024-09-21 23:11:34

head 函数支持负数。

head --help

-n, --lines=[-]K         print the first K lines instead of the first 10;
                         with the leading '-', print all but the last
                         K lines of each file

例如,正数打印前 2 行。

 head -n +2

 AAAA
 BBBB

负数将打印除前 2 行之外的所有内容。

head -n -2

CCCC
DDDD
EEEE

请注意,与 tail 不同,这不需要事先了解文件中的总行数。无论有多少行,它都会排除前 2 行。 tail -n -2 的负数可以类似地用于删除文件的最后 2 行。

请注意,这使用 GNU 头版本 8.22。该功能在最初发布时可能不可用。即使是相当老的 Linux 发行版现在也可以使用。

The head function supports this with negative numbers.

head --help

-n, --lines=[-]K         print the first K lines instead of the first 10;
                         with the leading '-', print all but the last
                         K lines of each file

For example, a positive number prints the first 2 lines.

 head -n +2

 AAAA
 BBBB

A negative number prints all except for the first 2 lines.

head -n -2

CCCC
DDDD
EEEE

Note that unlike with tail this does not require prior knowledge of the total number of lines in a file. It excludes the first 2 lines regardless of how many lines there are. Negative numbers for tail -n -2 can similarly be used to remove the last 2 lines of a file.

Note this uses GNU head version 8.22. This feature may not have been available at the original time of release. It is now available even if fairly old linux distros.

我一直都在从未离去 2024-09-21 23:11:34

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

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

希望这有帮助。

I really don't know how to do it from just tail or head but with the help of wc -l (line count) and bash expression, you can achieve that.

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

Hope this helps.

清引 2024-09-21 23:11:34

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

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

awk 获取除前 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"

using awk to get all but the last 2 line

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

awk to get all but the first 2 lines

awk 'NR>2' file

OR you can use more

more +2 file

or just bash

#!/bin/bash

i=0
while read -r line
do
  [[ $i > 1 ]] && echo "$line"
  ((i++))
done <"file"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文