0
votes

Concaténant des fichiers à bash

Supposons que j'écris un script shell foo.bash code> pour concaténer le contenu de test / *. TXT code> avec une virgule comme celle-ci:

> cat test/x.txt
a b c
> cat test/y.txt
1 2 3
> foo.bash test
a b c,
1 2 3


2 commentaires

L'exemple que vous donnez est incompatible avec votre déclaration. Vos fichiers test / x.txt et test / y.txt se terminent par une nouvelle ligne qui n'est pas disponible dans la sortie.


Vos fichiers sont-ils uniquement des lignes simples?


3 Réponses :


0
votes

Vous pouvez utiliser regex pour le réaliser. La commande ci-dessous attrape le contenu de chaque fichier et l'ajouter après le nom du fichier ( $ argv code>).

$ grep -ER '*'
a.txt:a
b.txt:b
c.txt:c
$ perl -pe 's/^(.*)\n$/$ARGV:\1,/;' * > file.txt
$ cat file.txt
a.txt:a,b.txt:b,c.txt:c,


1 commentaires

Cela ne ajoute pas le contenu des fichiers.



1
votes

Qu'en est-il de xxx

ou peut-être xxx


1 commentaires

chat "$ dossier"; Printf ','; Vous n'avez pas besoin de substitution de commande dans le corps de la boucle comme vous l'avez.



1
votes

Pourriez-vous essayer de suivre (au cas où vous souhaitez concaténer des lignes de fichiers, ligne par ligne avec virgule).

awk 'ENDFILE{print ","} 1' *.txt | sed '$d'


0 commentaires