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

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

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

答案1

bashzsh你可以这样做:

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

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

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

David Z 在 Bash 中评论道:

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

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

答案2

另一种不使用cat发现的方法这里,

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

最后一个sed 1d管道是删除第一行,该行也将具有分隔符。

sed然而,如果我们按照建议使用命令,那么最终的使用就可以很好地避免1_CR在他的评论中。

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

答案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

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

答案4

使用find的参数-printf-exec,结合使用,cat您可以在文件内容之前和之后放置文本。

find . -type f -name "*.txt" -printf "/n This is before! \n" -exec cat {} \; -printf "/n This is after! /n" >> output.txt

相关内容