我有两个文件a和b,并且想要生成第三个文件c,它具有a的前三行和b的最后五行(最好是带有一行命令)。
这就是我到目前为止所得到的,但这只有在我知道我的第二个文件(在这种情况下是10行)中有多长时间才有效:
head -n 3 a | cat - b | sed '4,8d'
有更好的解决方案吗?
答案 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