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
3 Réponses :
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,
Cela ne ajoute pas le contenu des fichiers.
Qu'en est-il de ou peut-être p>
chat "$ dossier"; Printf ','; Code> Vous n'avez pas besoin de substitution de commande dans le corps de la boucle comme vous l'avez.
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'
L'exemple que vous donnez est incompatible avec votre déclaration. Vos fichiers
test / x.txt code> et
test / y.txt code> se terminent par une nouvelle ligne qui n'est pas disponible dans la sortie.
Vos fichiers sont-ils uniquement des lignes simples?