我在当前目录中有一个名为test.txt
的文本文件。现在我想将test.txt
的第一行及其最后一行输出到cat text.txt | (head -1 ; tail -1)
的终端,但结果是它只将第一行输出到终端。
如何使用单个命令输出第一行和最后一行?
答案 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