Bash lignes texte

Fermé
Jeremyprog - Modifié le 24 janv. 2022 à 17:41
mamiemando Messages postés 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 novembre 2024 - 24 janv. 2022 à 17:51
Bonjour,

J'ai un dossier qui contient au moins 1000 fichiers du genre
8374528
9274958
7252637
9473736


Chacun des fichiers contient entre 3 lignes et 500 lignes pour certains.
Je voudrais que tous les fichiers contiennent 10 lignes exactement, pas plus, pas moins.
Je ne peux pas rassembler tous les fichiers en 1 seul il ferai plus de 30giga

C'est sûrement pas possible mais bon ... :)

3 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
15 janv. 2022 à 11:14
hello
tronquer chaque fichier pour qu'il ne fasse que 10 lignes ou moins ?
0
Merci pour ta réponse
Du genre awk '{i += (length() + 1); print $ALL; if (i >= 10 exit}' myfile.txt
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
16 janv. 2022 à 11:54
pas compris
0
mamiemando Messages postés 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 novembre 2024 7 799
Modifié le 24 janv. 2022 à 17:51
Bonjour,

Si tu ne veux récupérer que les 10 premières lignes d'un fichier, tu peux utiliser la commande
head -n10 fichier
.
  • Que fais-tu des lignes en trop ? Tu les ignores ?
  • Vu que certains fichiers ne font moins de 10 lignes, qu'en fais-tu ? (tu as dit que tu voulais exactement 10 lignes dans chaque fichier). Tu supprimes les fichiers trop courts ?
  • Est-ce que tu cherches à faire "comme si" tu concaténais tous tes fichiers de 30Go (e.g.
    cat dossier/*
    ), et ensuite tu saucissonnes ce fichier en petits fichiers de 10 lignes chacun ? Dans ce cas comment doivent être nommés ces fichiers ? Que fais-tu des dernières lignes si le nombre de ligne total n'est pas un multiple de 10 ? Peut être que
    split
    pourrait t'intéresser


Exemple jouet :

mkdir ~/toto
cd ~/toto
cat /etc/passwd /etc/fstab | split -l 5


Dans ce dossier, tu auras alors plein de fichiers de 5 lignes (excepté le dernier qui peut en contenir moins). Su tu lances
cat /etc/passwd /etc/fstab
et
cat ~/toto/*
, tu devrais obtenir le même résultat.

Bref dans ton cas ton problème reviendrait à

mkdir ~/toto
cd ~/toto
cat /mon/dossier/* | split -l 10


Merci de clarifier ta question en cas de besoin.

Bonne chance
0