【问题标题】:Why does my tail command -n+NUM not work? [duplicate]为什么我的尾部命令 -n+NUM 不起作用? [复制]
【发布时间】:2021-09-13 00:40:34
【问题描述】:

我想了解Linux中的以下命令:

# tail -n+454 /path/to/a/file | head -n 6

我希望tail -n+454 /path/to/a/file 会打印从第 454 行和以下 5 行开始的行。

| 将该输出作为输入发送到head。然后只取前 10 行。

最后,-n 6 定义只有前 6 行打印到屏幕上。

我是否正确翻译了命令?

现在我有以下问题:假设我有一个文件和以下行:

# Step #6: Configure output plugins

我想打印该行之前的 5 行(包括该行)。

首先我检查了我的问题行的行号:

nl /path/to/a/file | grep output

行号是 459。

我想要第 459 行之前的 5 行以及第 459 行本身(即第 454 行到第 459 行)。

tail -n+454 /path/to/a/file | head -n 6 命令给了我以下输出:

...这是第 380 到 384 行:

我希望得到第 454 到 459 行。我不明白什么?我的命令不正确吗?

【问题讨论】:

    标签: linux tail


    【解决方案1】:

    使用这个命令:

    head -n $(grep -n "Step #6: Configure output plugins" /path/to/a/file | awk -F ':' '{print $1}') /path/to/a/file | tail -n 5 
    

    注意:
    该命令有两个部分

    a) 找到行号:

    grep -n "Step #6: Configure output plugins" /path/to/a/file | awk -F ':' '{print $1}'
    

    b) 过滤你想要的行:

    head -n [LINE NUMBER] /path/to/a/file | tail -n 5 
    

    【讨论】:

    • 感谢您的评论。你有什么想法,为什么我的命令(如上所述)没有按预期工作?我想用 tail -n+NUM 命令解决这个问题。我正在寻找解释,为什么它不起作用以及我必须进行哪些更改才能使其起作用。
    • 实际上,您想要目标上方的 5 行。所以使用tail真是个坏主意|头 。您需要计算:tail -n $((NUM + 5)) 示例:tail -n $((459 + 5)) | hean -n 5
    • 嘿,我的问题有一个更简单的解决方案。检查我的帖子。
    【解决方案2】:

    我犯的错误是我只显示文件中的非空行,这是错误的。

    最好用……

    nl -ba [FILE]
    

    对文件中的所有行进行编号。然后查找感兴趣的行并使用 head 和 tail 命令(带有管道)获得最终结果。

    例子:

    tail -n +539 [FILE] | tail -n 6
    tail -n +539 [FILE] | head -n -212
    head -n 544 [FILE] | tail -n 6
    head -n 544 [FILE] | tail -n +539
    

    所有命令都导致相同的结果。

    我犯的另一个错误是语法。 -n 和 +NUM 之间应该有一个空格。

    顺便说一句,我的 OP 中的行号是错误的,因为我使用了错误的编号行命令。我指的是 544 而不是 459。

    猜你喜欢
    • 2021-03-28
    • 2015-04-29
    • 1970-01-01
    • 2021-08-12
    • 2011-06-14
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多