J’ai un certain nombre de fichiers dans un répertoire. Je voudrais parcourir le répertoire et mettre la dernière ligne de chaque fichier dans un nouveau fichier unique. IE, ce nouveau fichier devrait contenir la dernière ligne de chaque fichier du répertoire. J’ai essayé d’utiliser
tail -n 1 | cat > newfile.txt
mais qui a inséré le nom du fichier source entre chaque ligne. J’ai également essayé d’écrire un script shell, mais la seule chose qu’il a réussi à faire est de créer le fichier de destination, puis de l’exécuter indéfiniment sans jamais append de données. Quelle est la bonne façon de faire cela? Toute aide est très appréciée.
Au moins la tail
coreutils
a un drapeau -q
qui ne produit pas les en-têtes, donc un simple:
tail -q -n1 * > OUTFILE
Travaillerait.
Utilisez find
:
find . -type f -exec tail -n1 {} >> newfile.txt \;
Ou si vous ne voulez pas parcourir les sous-répertoires:
find . -depth 1 -type f -exec tail -n1 {} >> newfile.txt \;
find
works, mais une boucle for fonctionne également si vous êtes dans sh / bash / ksh / zsh.
for filename in *; do tail -n 1 "$filename" >> /path/to/newfile.txt done
Notez que vous pouvez avoir des résultats étranges avec newfile.txt
dans le même répertoire que celui sur lequel vous exécutez votre boucle for *
.