如何将一个文件的头部与带有shell的第二个文件的末尾组合?

时间:2015-11-05 10:55:31

标签: bash

我有两个文件a和b,并且想要生成第三个文件c,它具有a的前三行和b的最后五行(最好是带有一行命令)。

这就是我到目前为止所得到的,但这只有在我知道我的第二个文件(在这种情况下是10行)中有多长时间才有效:

head -n 3 a | cat - b | sed '4,8d'

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:6)

只需对命令进行分组并重定向其输出:

(head -3 a; tail -5 b) > c

甚至在不调用子shell的情况下更好(由Ignacio Vazquez-Abrams提供):

{ head -3 a; tail -5 b; } > c

您可以在Bash reference manual -> 3.2.4.3 Grouping Commands

中了解相关信息
( list )
     

在括号中放置命令列表会导致子shell   要创建的环境(请参阅命令执行环境)和   列表中的每个命令都将在该子shell中执行。以来   列表在子shell中执行,变量赋值不会保留   子shell完成后生效。

{ list; }
     

在花括号之间放置一个命令列表会导致列表成为   在当前shell上下文中执行。没有创建子shell。该   需要以下分号的分号(或换行符)。

测试

$ seq 10 > a
$ seq 20 30 > b
{head -3 a; tail -5 b; } > c
$  cat c
1
2
3
26
27
28
29
30