Extrait de lignes d'un fichier unix
Résolu/Fermé
A voir également:
- Unix extraire des lignes d'un fichier
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Extraire une video youtube - Guide
- Ouvrir un fichier .bin - Guide
4 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
2 déc. 2010 à 11:31
2 déc. 2010 à 11:31
Salut,
$ ls plop $ cat plop acbdXXXhijklmnopqrstuvwxyz abcdefghijklmnYYYrstuvwxyz abcdefghXXXlmnopqrstuvwxyz abYYYfghijklmnopqrstuvwxyz $ sed -n '/^.\{4\}XXX/w fichA' plop $ sed -n '/^.\{14\}YYY/w fichB' plop $ ls fichA fichB plop $ cat fichA acbdXXXhijklmnopqrstuvwxyz $ cat fichB abcdefghijklmnYYYrstuvwxyz $
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
2 déc. 2010 à 16:52
2 déc. 2010 à 16:52
Sinon le plus simple c'est encore avec "awk" :
;-))
$ ls bar.awk toto $ cat toto C01IC+0000003822+0000000000+0000000000+00+00000 C01IC+0000003822+0000000000+0006593856+01+00000 C01IC+0000003822+0000000000+0006593856+01+00001 $ cat bar.awk $4 ~ /0000000000/ && $5 ~ /00/ && $6 ~ /00000/ { print $0 >> "fichA" } $4 !~ /0000000000/ && $5 !~ /00/ && $6 ~ /00000/ { print $0 >> "fichB" } $4 !~ /0000000000/ && $5 !~ /00/ && $6 !~ /00000/ { print $0 >> "fichC" } $ awk -F'+' -f bar.awk toto $ ls bar.awk fichA fichB fichC toto $ cat fichA C01IC+0000003822+0000000000+0000000000+00+00000 $ cat fichB C01IC+0000003822+0000000000+0006593856+01+00000 $ cat fichC C01IC+0000003822+0000000000+0006593856+01+00001 $
;-))
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
3 déc. 2010 à 09:50
3 déc. 2010 à 09:50
On définit le séparateur de champs comme étant "+" (le signe plus), -F'+'.
Ensuite on compare les champs avec des conditions :
Si le champs "4" ($4) est égal à /0000000000/ et (&&) le champ 5 à /00/ et le champ 6 à /00000/ on écrit la ligne ($0) dans fichA.
etc.
Ensuite on compare les champs avec des conditions :
$4 ~ /0000000000/ && $5 ~ /00/ && $6 ~ /00000/ { print $0 >> "fichA" }
Si le champs "4" ($4) est égal à /0000000000/ et (&&) le champ 5 à /00/ et le champ 6 à /00000/ on écrit la ligne ($0) dans fichA.
etc.
Voici les 3 différentes lignes :
C01IC+0000003822+0000000000+0000000000+00+00000 -> Fichier A
C01IC+0000003822+0000000000+0006593856+01+00000 -> Fichier B
C01IC+0000003822+0000000000+0006593856+01+00001 -> Fichier C
Je dois tester 3 champs différents qui sont en fait des numériques signés (+001230...). Les champs en questions sont les 3 derniers de chaque ligne. Je dois éclater ces lignes dans 3 fichiers :
- Fichier A : les 3 champs sont à 0.
- Fichier B : champ 1 et 2 renseignés mais champ 3 à 0.
- Fichier C : aucun des champs n'est à 0.
C01IC+0000003822+0000000000+0000000000+00+00000 -> Fichier A
C01IC+0000003822+0000000000+0006593856+01+00000 -> Fichier B
C01IC+0000003822+0000000000+0006593856+01+00001 -> Fichier C
Je dois tester 3 champs différents qui sont en fait des numériques signés (+001230...). Les champs en questions sont les 3 derniers de chaque ligne. Je dois éclater ces lignes dans 3 fichiers :
- Fichier A : les 3 champs sont à 0.
- Fichier B : champ 1 et 2 renseignés mais champ 3 à 0.
- Fichier C : aucun des champs n'est à 0.
désolé c'est bon ! mon fichier en entrée déconnait (un caractère à la con...).
Donc j'ai bien extrait mes données vers le fichier A.
Par contre comment je peux extraire les lignes dans lesquelles la chaîne n'a pas été trouvée ?
Donc j'ai bien extrait mes données vers le fichier A.
Par contre comment je peux extraire les lignes dans lesquelles la chaîne n'a pas été trouvée ?
2 déc. 2010 à 12:14
La vraie chaine recherchée est : '+0000000000'
En recherchant +000 ça marche
mais +0000 non.
2 déc. 2010 à 12:31