结合两个文本文件之间添加一些分隔符?


16

cat file1 file2将合并两个文本文件。但是,如果要在两者之间添加一些分隔符,例如的一行或两行********************************,我是否必须打开第一个文件,并在其末尾添加该行,或者打开第二个文件,并在其顶部添加该行,然后运行该cat命令?只需运行命令就能完成吗?

Answers:


17

在中bashzsh您可以执行以下操作:

cat file1 <(echo '********************************') file2

或mikeserv在他的评论中指出(在任何shell中):

echo '********************************' | cat file1 - file2

在David B Zash的Bash中:

cat file1 - file2 <<< '********************************'

文件中的任何换行符都会显示。如果您不希望在“分隔符”之后使用换行符(例如file2,以换行符开头),则可以使用echo -n '****',因此请在*。之后取消换行符。


7
您可以在任何外壳中执行相同的操作,例如echo '**********************' |cat file - file2
mikeserv

谢谢。cat总是在文件之间隐式添加新行吗?
2014年

1
@Tim-绝对echo会的。
mikeserv

1
@Tim-在这里看起来不一样,但您自己看看printf 'no newline' | tee file1 >file2; printf 'no newline' | cat file1 - file2
mikeserv

1
@Tim可以用于...<(echo -n '****')禁止回显换行符。cat仅在文件有一个(末尾)时显示一个。
Anthon 2014年

6

另一种没有使用cat这里找到的方法,

awk 'FNR==1{print "******"}{print}' file1 file2 | sed '1d'

最后的sed 1d管道是删除第一行,该行也将有定界符。

但是,sed如果我们使用1_CR在他的注释中建议的命令,则很可能避免最终使用。

awk 'FNR==1 && NR!=1 {print "******"}{print}' file1 file2

1
您可以sed通过将awk模式更改为FNR == 1 && NR != 1
iruvar

恭喜您达到10K!
G-Man说'Resstate Monica'2014年

@ G-Man,非常感谢。恭喜您,真是太好了:)
Ramesh

这可以轻松扩展到文件模式的正则表达式
保罗

3

您还可以将其拆分为多个命令:

cat file1; echo '------------'; cat file2

然后,您可以使用组命令或子shell对其进行管道传输或重定向:

# GROUP COMMAND:
{ cat file1; echo '----------'; cat file2; } | other-command
#                                        ^ final semicolon is part of the syntax!

# SUBSHELL:
( cat file1; echo '----------'; cat file2 ) | other-command

当然,您可以将其写在多行上,而不是像通常那样使用分号。而且很容易使用另一个定界符将其扩展到另一个文件,等等。


2

paste

$ echo '********************************' | paste -sd$'\n' file1 - file2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.