Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/10/2017, à 08:29

thurston

[RESOLU] Contenu d'un fichier texte rangé dans fichiers A.txt, B.txt

Bonjour,

J'ai un besoin actuel d'un petit script qui permettrait d’extraire le contenu d'une liste d'un fichier texte, et de le ranger dans des fichiers créés en fonction de la première lettre de chaque ligne du fichier initial.
Je me suis dit que peut etre quelqu'un avait déjà créer ce genre de fichier. Je ne suis pas très à l'aise avec bash, meme si ca me parait assez simple. Si jamais, merci d'avance
Pour tout texte contenant un chiffre, il serait placé dans un fichier 123.txt.
Thurston.

Exemple:
fichier.initial une liste de titres de DVD (c'est le but ultime du script)

Aladin et les 40 voleurs
Alibi
Bambi
Zorro

Résulat attendu
A.txt,

Aladin et les 40 voleurs
Alibi

B.txt

Bambi

Z.txt

Zorro

Dernière modification par thurston (Le 12/10/2017, à 10:07)

Hors ligne

#2 Le 12/10/2017, à 08:55

pingouinux

Re : [RESOLU] Contenu d'un fichier texte rangé dans fichiers A.txt, B.txt

Bonjour,

#!/bin/bash
while read tit
do
   c=${tit:0:1}
   echo "$tit" >>"$c.txt"
done <fichier.initial

Pour tout texte contenant un chiffre, il serait placé dans un fichier 123.txt.

Je ne comprends pas ton exemple, car le 40 du premier fichier n'a pas changé sa destination.

Hors ligne

#3 Le 12/10/2017, à 08:58

Watael

Re : [RESOLU] Contenu d'un fichier texte rangé dans fichiers A.txt, B.txt

salut,

le but est donc de
lire chaque ligne du fichier
récupérer le premier caractère de la ligne en cours
tester si c'est un nombre
   alors ajouter la ligne à 123.txt
   ou ajouter la ligne à "premierCaractère".txt


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#4 Le 12/10/2017, à 09:56

kholo

Re : [RESOLU] Contenu d'un fichier texte rangé dans fichiers A.txt, B.txt

salut,
en 8 lettres,... ou le compte est bon...
un fichier initial :

Aladin et les 40 voleurs
Alibi
Bambi
Zorro
123 un film en nombre
- un caractère inconnu
(qui vous offre des fleurs)
star whores (autre version...)

code version longue :

fileInitial="$(< "fichier.initial")"
IFS=$'\n' fileInitial=( $fileInitial )

for ligne in ${fileInitial[@]}
do
	premLettre=${ligne:0:1}
	premLettre="${premLettre^^}" # première lettre en maj
	case $premLettre in
		[0-9])			fichOUT="123.txt"
						;;
		# [a-z]|[A-Z])	fichOUT="$premLettre.txt" # pas la peine puisque première lettre en maj
						# ;; 
		[A-Z])			fichOUT="$premLettre.txt"
						;;
		*)				fichOUT="NC.txt"
						# echo "quezaco : $premLettre ?"
						;;
	esac

	# echo "Vérif : $ligne
	# premLettre=$premLettre
	# fichOUT=$fichOUT"

	if [ ! -f "$fichOUT" ]; then > "$fichOUT" ; fi
	echo "$ligne" >> "$fichOUT"
done

exit 0

Hors ligne

#5 Le 12/10/2017, à 10:01

thurston

Re : [RESOLU] Contenu d'un fichier texte rangé dans fichiers A.txt, B.txt

Merci vraiment à tous, je commence à tester vos propositions, tout fonctionne bien et ca colle exactement avec mon besoin.
Je pense que ma demande est d'ores et déjà résolue.
Encore merci, je viens de gagner pas mal de temps grace à vous, et éviter l'écriture d'un code horrible, grace à vos inputs.
A+
Thurston

Dernière modification par thurston (Le 12/10/2017, à 10:08)

Hors ligne

#6 Le 12/10/2017, à 11:46

Watael

Re : [RESOLU] Contenu d'un fichier texte rangé dans fichiers A.txt, B.txt

allez, kholo ! encore un effort pour faire plus inutilement compliqué.
smile

Dernière modification par Watael (Le 12/10/2017, à 11:46)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 13/10/2017, à 08:58

kholo

Re : [RESOLU] Contenu d'un fichier texte rangé dans fichiers A.txt, B.txt

merci de me reprendre chaque fois Watael...
j'arrive pas à me dire qu'une variable est un tableau tant que je ne l'ai pas défini explicitement...
c'est dans la tête...
je passe mon temps à chercher comment le séparateur peut être reconnu...
là c'est un manque complet de culture,...
je devrais prendre le temps pour des cours
je suis un peu ton elleji !!!

edit ... oups, j'oubliais :
je ne sais finalement pas ce qui te semble le plus lourd...
mon utilisation abusive de ma forme pour passer un fichier texte en tableau
ou le case que je met systématiquement quand j'ai plus de deux tests
ou les trucs purement inutiles comme certaines lignes ou création de variables...
note que pour une fois j'ai pas mis de fonctions de partout ! lol
ma version, je pense, corrigée

#!/bin/bash
while read ligne
do
	premLettre=${ligne:0:1}
	case ${premLettre} in
		[0-9])			echo "$ligne" >> "123.txt" ;;
		[a-z]|[A-Z])		echo "$ligne" >> "${premLettre^^}.txt" ;;
		*)			echo "$ligne" >> "0_NC.txt" ;;
	esac
done <fichier.initial

Dernière modification par kholo (Le 13/10/2017, à 09:16)

Hors ligne

#8 Le 13/10/2017, à 09:55

credenhill

Re : [RESOLU] Contenu d'un fichier texte rangé dans fichiers A.txt, B.txt

hello

$ awk -F "" '/^[0-9]/ {f="123.txt"} !/^[0-9]/ {f=$1 ".txt"} {print $0 > f}' fichier.initial 

Hors ligne

#9 Le 14/10/2017, à 20:25

thurston

Re : [RESOLU] Contenu d'un fichier texte rangé dans fichiers A.txt, B.txt

> credenhill

impressionnant, et ca fonctionne !
Merci à tous
T

Hors ligne

#10 Le 18/10/2017, à 08:16

DonutMan75

Re : [RESOLU] Contenu d'un fichier texte rangé dans fichiers A.txt, B.txt

Bonjour à tous,
allez il manquait une solution avec grep ^^

La séquence de lettres est définie par {A..Z}, syntaxe qui n'existe qu'en bash il me semble.
Le problème de ce script est qu'il crée des fichiers de sortie A.txt, B.txt etc... même s'il n'y a aucun titre qui commence par cette lettre... hmm
Mais sinon ça semble marche impec smile

#! /bin/bash

filein='./liste.txt'

for letter in {A..Z} ; do
	grep -iE "^${letter}" ${filein} > ${letter}.txt
done

grep -E "^[0-9]" ${filein} > 123.txt

Bonne journée à tous !

Donut

Hors ligne