Trier fichier avec sed, sortie dans 2 fichiers
Résolu/Fermé
marwai
Messages postés
8
Date d'inscription
samedi 15 février 2014
Statut
Membre
Dernière intervention
13 juillet 2014
-
Modifié par marwai le 15/02/2014 à 16:58
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 16 févr. 2014 à 10:12
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 16 févr. 2014 à 10:12
A voir également:
- Trier fichier avec sed, sortie dans 2 fichiers
- Fichier rar - Guide
- Fichier host - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier iso - Guide
5 réponses
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
16 févr. 2014 à 10:12
16 févr. 2014 à 10:12
hello
avec awk en 1 ligne
avec awk en 1 ligne
$ awk '/\/1$/ {f=1} /\/2$/ {f=2} {print > "read" f}' fichier
$ more read*
::::::::::::::
read1
::::::::::::::
@_5:1:7:9569:21200/1
CAGAATGCCGTGGAACTGAAACGTCTGGC
+
CCCFFFFFHHHHHJJJJIJJIHIJJIJJI
@_5:1:11:12099:7543/1
CAGAATGCCGTGGAACTGAAACGTCTGGC
::::::::::::::
read2
::::::::::::::
@_5:1:7:9569:21200/2
GCACCATCATCACCGGTTCCGGGCAGCGC
+
CCCFFFFFHHFHHJJJGHJJJJJJJIGGI
$
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
15 févr. 2014 à 17:20
15 févr. 2014 à 17:20
Salut,
Avec
Déjà parce qu'il te faut écrire dans 2 fichiers séparément et ça avec une redirection en une seule fois ce n'est pas possible.
Ensuite, la seule façon d'écrire d'écrire dans un fichier avec
Par contre avec une fichier de script (ou depuis un terminal mais sur plusieurs lignes) c'est possible :
Le fichier de référence :
Le script sed :
La commande :
Le contenu des 2 fichirs :
Avec
sedet en une seule ligne tu ne pourras pas.
Déjà parce qu'il te faut écrire dans 2 fichiers séparément et ça avec une redirection en une seule fois ce n'est pas possible.
Ensuite, la seule façon d'écrire d'écrire dans un fichier avec
sedc'est en utilisant la commande "w" (write), qui a un inconvénient, c'est que le seul paramètre autorisé derrière la commande c'est le nom du fichier. Donc sur une seule ligne ce n'est pas possible directement.
Par contre avec une fichier de script (ou depuis un terminal mais sur plusieurs lignes) c'est possible :
Le fichier de référence :
$ cat plop
@_5:1:7:9569:21200/1
CAGAATGCCGTGGAACTGAAACGTCTGGC
+
CCCFFFFFHHHHHJJJJIJJIHIJJIJJI
@_5:1:7:9569:21200/2
GCACCATCATCACCGGTTCCGGGCAGCGC
+
CCCFFFFFHHFHHJJJGHJJJJJJJIGGI
@_5:1:11:12099:7543/1
CAGAATGCCGTGGAACTGAAACGTCTGGC
Le script sed :
$ cat script.sed
#n
/\/1$/,+3{
w f1
}
/\/2$/,+3{
w f2
}
La commande :
$ sed -f script.sed plop
Le contenu des 2 fichirs :
$ cat f1
@_5:1:7:9569:21200/1
CAGAATGCCGTGGAACTGAAACGTCTGGC
+
CCCFFFFFHHHHHJJJJIJJIHIJJIJJI
@_5:1:11:12099:7543/1
CAGAATGCCGTGGAACTGAAACGTCTGGC
$ cat f2
@_5:1:7:9569:21200/2
GCACCATCATCACCGGTTCCGGGCAGCGC
+
CCCFFFFFHHFHHJJJGHJJJJJJJIGGI
marwai
Messages postés
8
Date d'inscription
samedi 15 février 2014
Statut
Membre
Dernière intervention
13 juillet 2014
15 févr. 2014 à 18:07
15 févr. 2014 à 18:07
Merci beaucoup pour ta réponse rapide! Ca fait plaisir ^^
Merci également pour le code. Je comprends mieux maintenant.
Ca marche nickel avec le script sed, j'ai juste enlevé le $ dans le motif: je ne sais pas pourquoi mais quand il y est les fichiers sont vides. Je me demande si ça ne viendrait pas du fichier de base, genre un problème sur le caractère de saut/retour de ligne. Enfin, dans mon cas ça ne devrait pas trop poser de problèmes puisque ce motif ne se retrouve qu'une seule fois dans une ligne lorsqu'il est présent.
En tout cas encore un grand merci!
Merci également pour le code. Je comprends mieux maintenant.
Ca marche nickel avec le script sed, j'ai juste enlevé le $ dans le motif: je ne sais pas pourquoi mais quand il y est les fichiers sont vides. Je me demande si ça ne viendrait pas du fichier de base, genre un problème sur le caractère de saut/retour de ligne. Enfin, dans mon cas ça ne devrait pas trop poser de problèmes puisque ce motif ne se retrouve qu'une seule fois dans une ligne lorsqu'il est présent.
En tout cas encore un grand merci!
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
15 févr. 2014 à 18:10
15 févr. 2014 à 18:10
Je me demande si ça ne viendrait pas du fichier de base, genre un problème sur le caractère de saut/retour de ligne.Pour le savoir il te faut afficher les caractères non-imprimables avec un
cat -A fichierpar exemple.
Mais bon, si c'est inutile de tester la fin de ligne, pas la peine de s'embêter ;-)
marwai
Messages postés
8
Date d'inscription
samedi 15 février 2014
Statut
Membre
Dernière intervention
13 juillet 2014
15 févr. 2014 à 18:17
15 févr. 2014 à 18:17
Oui, en effet, pas la peine de s'embêter.
Je me posais juste une question supplémentaire sur le nom des fichiers après la commande "w": est-ce qu'il est possible que ces noms de fichiers soient fonction du paramètre après "-f" lors de l'appel du script?
ex: script.sed -f plop
et avoir plop1 et plop2
?
Je me posais juste une question supplémentaire sur le nom des fichiers après la commande "w": est-ce qu'il est possible que ces noms de fichiers soient fonction du paramètre après "-f" lors de l'appel du script?
ex: script.sed -f plop
et avoir plop1 et plop2
?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
15 févr. 2014 à 18:22
15 févr. 2014 à 18:22
Non, il faut les écrire en dur dans le fichier
De plus, le paramètre
script.sed.
De plus, le paramètre
-fsert à appeler le fichier contenant les instructions pour
sed, donc rien à voir avec le fichier à traiter ;-\
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
marwai
Messages postés
8
Date d'inscription
samedi 15 février 2014
Statut
Membre
Dernière intervention
13 juillet 2014
15 févr. 2014 à 18:24
15 févr. 2014 à 18:24
Ok, merci beaucoup ^^
J'avais une erreur dans mon script bash avec ton code, mais maintenant ça fonctionne (j'avais du rajouter ou enlever un espace quelque part =s ). Du coup je vais regarder ça en bash.
En tout cas encore merci! C'était une question pour un potentiel job, si jamais ça marche ça sera grâce à toi ;)
J'avais une erreur dans mon script bash avec ton code, mais maintenant ça fonctionne (j'avais du rajouter ou enlever un espace quelque part =s ). Du coup je vais regarder ça en bash.
En tout cas encore merci! C'était une question pour un potentiel job, si jamais ça marche ça sera grâce à toi ;)
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
15 févr. 2014 à 18:28
15 févr. 2014 à 18:28
C'était une question pour un potentiel job, si jamais ça marche ça sera grâce à toi ;)Si ça ne marche pas pour toi, dis-leur que je suis libre ;-))
Bonne chance.