Petit coup de main en bash(lignes dupliquées)
Résolu
Shaggy_2_Dope
Messages postés
376
Date d'inscription
Statut
Membre
Dernière intervention
-
Shaggy_2_Dope Messages postés 376 Date d'inscription Statut Membre Dernière intervention -
Shaggy_2_Dope Messages postés 376 Date d'inscription Statut Membre Dernière intervention -
Bonjour tout le monde,
voilà j'ai à ma disposition un fichier contenant ce genre de choses :
CYS A 61 - CYS A 335
CYS A 229 - CYS A 213
CYS A 219 - CYS A 214
CYS A 214 - CYS A 219
CYS A 254 - CYS A 304
CYS A 304 - CYS A 254
CYS A 213 - CYS A 229
CYS A 335 - CYS A 61
Il y a 8 lignes mais en fait chaque ligne est "dupliquée" mais pas à l'identique. Je m'explique :
CYS A 61 - CYS A 335 = CYS A 335 - CYS A 61
CYS A 229 - CYS A 213 = CYS A 213 - CYS A 229
...etc
Il n'y a donc que 4 lignes informatives... le reste ne sert pas.
Donc ce que j'aimerais faire c'est ne garder qu'une occurence sur deux, à savoir :
CYS A 61 - CYS A 335
CYS A 229 - CYS A 213
CYS A 219 - CYS A 214
CYS A 254 - CYS A 304
vous pensez que c'est faisable en bash ?
d'avance merci ;)
Shagg
voilà j'ai à ma disposition un fichier contenant ce genre de choses :
CYS A 61 - CYS A 335
CYS A 229 - CYS A 213
CYS A 219 - CYS A 214
CYS A 214 - CYS A 219
CYS A 254 - CYS A 304
CYS A 304 - CYS A 254
CYS A 213 - CYS A 229
CYS A 335 - CYS A 61
Il y a 8 lignes mais en fait chaque ligne est "dupliquée" mais pas à l'identique. Je m'explique :
CYS A 61 - CYS A 335 = CYS A 335 - CYS A 61
CYS A 229 - CYS A 213 = CYS A 213 - CYS A 229
...etc
Il n'y a donc que 4 lignes informatives... le reste ne sert pas.
Donc ce que j'aimerais faire c'est ne garder qu'une occurence sur deux, à savoir :
CYS A 61 - CYS A 335
CYS A 229 - CYS A 213
CYS A 219 - CYS A 214
CYS A 254 - CYS A 304
vous pensez que c'est faisable en bash ?
d'avance merci ;)
Shagg
A voir également:
- Petit coup de main en bash(lignes dupliquées)
- Partage de photos en ligne - Guide
- Scan ligne de la main gratuit - Télécharger - Photo & Graphisme
- Coup d'un soir avis - Forum Réseaux sociaux
- Mètre en ligne - Guide
- Je cherche un site de rencontre sérieux et pas cher ✓ - Forum Consommation & Internet
2 réponses
Un truc que tu peux faire, c'est faire une boucle qui met le plus petit en premier (CYS A 229 - CYS A 213 => CYS A 213 - CYS A 229) puis passé le résultat dans la commande unique qui supprime les doublons
Pour mettre le plus petit en premier, tu peux voir avec awk
Pour mettre le plus petit en premier, tu peux voir avec awk
merci pour la piste vignemail1 ;)
J'ai procédé de la façon suivante (ce n'est pas la plus élégante je le conçois...) :
soit nb_cyx = nb de lignes dans le fichier ss.dat
for i in $(seq 1 ${nb_cyx});
do
sed -n "${i} p" ss.dat | awk '{print $3,$7}' | tr -s ' ' '\n ' | sort -n | tr -s '\n' ' ' >> ss.dat.tmp
echo ' ' >> ss.dat.tmp
done
cat ss.dat.tmp | awk '{if (x[$0] !="") next ; print $0; x[$0]=$0}' > ss.dat.reor
et voili :)
Shagg
J'ai procédé de la façon suivante (ce n'est pas la plus élégante je le conçois...) :
soit nb_cyx = nb de lignes dans le fichier ss.dat
for i in $(seq 1 ${nb_cyx});
do
sed -n "${i} p" ss.dat | awk '{print $3,$7}' | tr -s ' ' '\n ' | sort -n | tr -s '\n' ' ' >> ss.dat.tmp
echo ' ' >> ss.dat.tmp
done
cat ss.dat.tmp | awk '{if (x[$0] !="") next ; print $0; x[$0]=$0}' > ss.dat.reor
et voili :)
Shagg