如何将文本的第一行和最后一行作为单个命令输出到终端

时间:2015-04-09 13:04:01

标签: bash

我在当前目录中有一个名为test.txt的文本文件。现在我想将test.txt的第一行及其最后一行输出到cat text.txt | (head -1 ; tail -1)的终端,但结果是它只将第一行输出到终端。

如何使用单个命令输出第一行和最后一行?

3 个答案:

答案 0 :(得分:2)

你可以使用awk。

awk 'NR==1{print}END{print}' file

答案 1 :(得分:2)

您的命令的问题只有 1st 命令 - head -1 - 接收stdin输入,因为它< em>在阅读时消耗,以便第二个命令 - tail -1 - 接收无输入

在这种特殊情况下,您可以使用命令分组{ ...; ...; }

{ head -1; tail -1; } < text.txt 

注意事项

  • 上述内容仅适用于可搜索输入,表示常规文件 here-string here-doc

    • 使用管道输入(cat text.txt | { head -1; tail -1; })或来自process substitutions{ head -1; tail -1; } < <(cat text.txt))的输入,因为此类输入不可搜索({ {1}}无法向后扫描。)
  • 即使有可搜索输入,也不是一次性将输入发送到多个命令的通用方法。

    • 上述方法仅适用,因为tail从(可搜索)输入的 end 向后读取,无论是否已读取所有输入。

作为更简单的替代 通常 ,这是一个tail解决方案:

sed
  • sed -n '1p; $p' text.txt 默认禁止输出
  • -n与第1p行匹配并打印出来(1)。
  • p与最后一行($p)匹配并打印出来。

答案 2 :(得分:0)

使用tee

cat text.txt | tee >(head -1) >(tail -1) > /dev/null