Linux: chat avec séparateurs parmi les fichiers

28

Sous Linux, si vous tapez cat *, vous obtiendrez quelque chose comme ceci:

ligne1 du fichier1
ligne2 du fichier1
ligne1 du fichier2
ligne1
du fichier3
ligne2 du fichier3 ligne3 du fichier3

Ce que je voudrais, c'est afficher un séparateur entre les fichiers. Quelque chose comme ceci:
ligne1 du fichier1
ligne2 du fichier1
XXXXXXXXXXXX
ligne1 du fichier2
XXXXXXXXXXXX
ligne1
du fichier3
ligne2 du fichier3 ligne3 du fichier3

Est-ce facilement possible avec un monoligne facile à taper par cœur?

Daniele
la source

Réponses:

40

Si vous n'êtes pas trop pointilleux sur l'apparence du séparateur:

tail -n +1 *
Gilles 'SO- arrête d'être méchant'
la source
C'est bien! Je suis surpris de voir à quel point votre commande est différente de tail -n 1 *. Je ne trouve non plus aucune mention de l'effet de +1 (plutôt que 1) dans la page de manuel.
Daniele
1
tail -n Xaffiche les dernières lignes X. tail -n +Xcommence à la ligne X commençant à 1 , c'est-à-dire qu'il affiche toutes les lignes sauf les premières (X-1).
Gilles 'SO- arrête d'être méchant'
Ah, maintenant je peux le voir dans la page de manuel. Je l'ai oublié. Super, merci beaucoup
Daniele
Des solutions similaires figurent dans cet article: everythingsysadmin.com/2012/09/unorthodoxunix.html
TomOnTime
Désolé pour le mauvais commentaire, mais c'est génial. Merci, @Gilles
Mike D
17

cd /to/your/directory; for each in *; do cat $each; echo "XXXXXXXXXXX"; done

Janne Pikkarainen
la source
me battre :-)
Sirex
Pourtant, la solution apportée par Gilles est incroyablement courte!
Janne Pikkarainen
Sensationnel. fonctionne à merveille. M'a aidé à concaténer un dossier de JSON
Mayank Chandak
11
awk 'FNR==1 && NR!=1 {print "XXXXXXXXXXXX"}{print}' *

Ou

awk 'FNR==1 {print "XXXXXX", FILENAME, "XXXXXX"}{print}' *

Ou

awk 'FNR==1 {print "XXXXXX File no. " ++count, "XXXXXX"}{print}' *

En utilisant uniquement Bash (non cat):

for file in *; do printf "$(<"$file")\nXXXXXXXXXXXX\n"; done

Modifier:

Dans AWK 4:

awk 'BEGINFILE {print "XXXXXXXXXXXX"}{print}' *

Vous pouvez utiliser n'importe quel séparateur tel que ceux des autres exemples de cette réponse. Si vous souhaitez que le séparateur se trouve à la fin de chaque fichier, passez BEGINFILEà ENDFILE. Il peut toujours apparaître au début du script car il s'agit d'un conditionnel (plutôt que d'un ordre d'exécution implicite).

En pause jusqu'à nouvel ordre.
la source
2
+1 pour awk! Je jure qu'il peut tout faire ...
brad