Joindre plusieurs files avec deux lignes vides?

J'essaie de joindre des files Markdown avec deux lignes entre chaque file.

J'ai essayé d'utiliser la command suivante:

paste -sd '\n\n' file1.md file2.md 

Cela joint les files avec une nouvelle ligne, mais pas deux nouvelles lignes, comme je l'ai besoin.

Quelle command puis-je utiliser pour joindre un nombre arbitraire de files avec deux caractères \n entre chaque jointure?

Avec paste :

 :|paste -sd'\n' file1.md - - file2.md 

Avec awk vous pouvez traiter plusieurs files et imprimer un délimiteur avant chaque file ( FNR==1 ) sauf le premier ( NR>1 ). Alors

 awk '(NR>1 && FNR==1){printf ("\n\n")};1' file1.md file2.md ... fileN.md 

concatène les files en ajoutant le délimiteur spécifié entre les deux.


Si vous ne vous occupez pas d'un délimiteur de fin dans la sortie finale, vous pouvez aussi faire (avec gnu sed ) dans ce cas particulier (le délimiteur est un nombre de lignes vides):

 sed -s '${G;G}' file1.md file2.md ... fileN.md 
 printf '\n\n' | cat file1.md - file2.md 

Quelque chose comme cuonglm, je pense. Aspirer à cela, de toute façon.

En plus de la réponse de Cuonglm:

 :|paste -sd'\n' $(sed $"s/\s/ - - /g" <<< $(ls -1|paste -sd" " -)) 

Pour que cela fonctionne, vous devez avoir tous les files, qui doivent être concaténés dans un dossier et à son mieux alphanumérique sortingés. La sortie peut ensuite être redirigée vers un file.

Qu'est-ce qu'il se passe ici?

 : 

C'est la vraie fonction dans bash. Ceci est principalement utilisé pour les no-ops car il renvoie juste vrai.

 | 

C'est un pipe, qui prend la sortie de la command de gauche et la canalise dans l'input de la command de droite.

 $(sed $"s/\s/ - - /g" <<< $(ls -1|paste -sd" " -)) 

Cela construit juste la ligne qui est nécessaire pour la pâte. Cela ressemblera à quelque chose comme

 file1 - - file2 - - file3 - - file4 ... 

Ainsi, quand la pâte est appelée, elle écrira toutes les lignes des files listés dans la sortie standard. Lorsqu'un file est introuvable ou appelé "-", la lecture de l'input standard est effectuée et la valeur VRAIE provient de ce qui est compressé dans paste.

Normalement, chaque file est ajouté à un opérateur d'tabs après avoir été écrit dans stdout. avec l'argument -d "\ n" pour coller l'onglet est échangé avec une nouvelle ligne.

Maintenant, coller écrit les files séparés par newlines à stdout et quand paste trouve un "-" il prend le vrai et écrit seulement le séparateur sur stdout – le newline.

Pas la meilleure solution, mais fonctionne pour votre cas:

 echo -e `cat file1.md`"\n\n"`cat file2.md` 

Avec un GNU awk plus récent:

 awk '1; ENDFILE {print "\n"}' files...