web-dev-qa-db-fra.com

Fractionnez un fichier par ligne et contrôlez l'extension des fichiers résultants

Il existe une commande standard pour le fractionnement de fichiers - fractionner.

Par exemple, si je veux diviser un fichier de mots en plusieurs morceaux de 10000 lignes, je peux utiliser:

split -dl 10000 words wrd

et il générerait plusieurs fichiers de la forme wrd.01, wrd.02 et ainsi de suite.

Mais je veux avoir une extension spécifique pour ces fichiers - par exemple, je veux obtenir les fichiers wtd.01.txt, wrd.02.txt.

Y a-t-il un moyen de le faire?

29
Rogach

Pas avec split, mais vous pouvez facilement les renommer par la suite, ou vous pouvez le faire dans awk:

awk '{filename = "wrd." int((NR-1)/10000) ".txt"; print >> filename}' inputfile
12
Kevin

Ce n'était pas disponible à l'époque mais avec plus de versions récentes (≥ 8.16) de gnu split on peut utiliser le --additional-suffix commutateur pour contrôler l'extension résultante. De man split:

--additional-suffix=SUFFIX
              append an additional SUFFIX to file names.

donc lorsque vous utilisez cette option:

split -dl 10000 --additional-suffix=.txt words wrd

les pièces résultantes se termineront automatiquement par .txt:

wrd00.txt
wrd01.txt
.........
52
don_crissti

Ces tâches sont mieux gérées avec le Shell. Utilisez split, puis écrivez une boucle simple pour renommer les fichiers. Par exemple.

for file in wrd.*
do
    mv "$file" "$file.txt"
done

renommerait vos fichiers wrd.01, wrd.02, etc. afin qu'ils aient tous une extension .txt.

14
Kyle Jones