combiner deux files text avec l'ajout d'un séparateur entre?

cat file1 file2 combinera deux files text. Mais si je veux append un séparateur entre, comme une ligne ou deux de ******************************** , faire Je dois ouvrir le premier file et append la ligne à sa fin, ou ouvrir le deuxième file et append la ligne en haut, puis exécuter la command cat ? Peut-on le faire en exécutant simplement une command?

Dans bash et zsh vous pouvez faire:

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

ou comme mikeserv indiqué dans son commentaire (dans n'importe quel shell):

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

et à Bash comme David Z a commenté:

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

Toutes les nouvelles lignes dans les files seront affichées. Si vous ne voulez pas de nouvelle ligne après le "séparateur" (par exemple si le file2 commence par une nouvelle ligne), vous pouvez utiliser echo -n '****' , supprimez la nouvelle ligne après le * .

Vous pouvez également le split en plusieurs commands:

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

Et vous pouvez canaliser ou redirect cela en utilisant une command de groupe ou un sous-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 

Bien sûr, vous pouvez écrire cela sur plusieurs lignes au lieu d'utiliser des points-virgules, comme d'habitude. Et il est facile de l'étendre à un autre file avec un autre délimiteur, etc.

Une autre approche sans utiliser le cat comme trouvé à partir d' ici ,

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

Le dernier pipe sed 1d est d'enlever la première ligne qui aura aussi le délimiteur.

Cependant, l'utilisation finale de sed pourrait très bien être évitée si nous utilisons la command comme suggéré par 1_CR dans ses commentaires.

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

Avec paste :

 $ echo '********************************' | paste -sd$'\n' file1 - file2