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 23/03/2017, à 12:58

Micawber

AWK : opérations colonne alternant entiers et chaînes de caractères

Bonjour à tous,

Je dois modifier certaines valeurs d'une colonne d'un fichier. Ma commande awk est la suivante :

awk '{
if ($5 >=5 && $5 <= 9)
    print $5+5;
else
    print $5;
}' AAC13.sam > temp_5

Il s'agit donc d'incrémenter de 5 la valeur lue lorsqu'elle est comprise entre 5 et 9. Or, il y a une des lignes ou ce n'est pas une valeur numérique dans cette colonne, mais une châine de caractères, du coup elle n'est pas copiée dans mon fichier de sortie, ça me fait une case vide.
J'ai essayé comme ça :

awk '{
$5 ~ /^[0-9]*$/
if ($5 >=5 && $5 <= 9)
    print $5+5;
else
    print $5;
}' AAC13.sam > temp_5

mais ça ne fait rien de plus. A noter aussi que pour les premières lignes du fichier, la colonne en question ne contiend pas de valeurs, mais ça ne pose pas de problème à awk.

Hors ligne

#2 Le 23/03/2017, à 13:21

Watael

Re : AWK : opérations colonne alternant entiers et chaînes de caractères

salut,

on peut avoir un échantillon représentatif du fichier ?
il est bien au format unix (\n et pas \r\n, ni \r) ?


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

En ligne

#3 Le 23/03/2017, à 14:44

Micawber

Re : AWK : opérations colonne alternant entiers et chaînes de caractères

Il est comme ça (toutes les colonnes sont espacées par des tabulations,:

@SQ	SN:C14264319	LN:100
@SQ	SN:C14264361	LN:100
@SQ	SN:C14261837	LN:100
@SQ	SN:C14262345	LN:100
@SQ	SN:C14265635	LN:100
    (... ainsi de suite pour environ 500k lignes : seulement 3 colonnes...)
@PG	ID:bwa	PN:bwa	VN:0.7.7-r441	CL:bwa sampe -a 600 -o 100000 (...)
8_2209_1564_2248	99	opera_scaffold_46	200239	60	114M	=	200541	416(...)
    (... ainsi de suite également pour environ 500k lignes, 22 colonnes ...)

La ligne qui pose problème est donc celle qui commence par @PG : la colonne 5 contiend "CL:bwa sampe -a 600 -o 100000 (...)".

Après réflexion, il semble (pas sûr) que ce soit un problème de séparateur (des tabulations entre chaque colonne et des espaces dans ma chaîne de caractères). J'essaie avec -F $'\t' mais j'ai des erreurs de syntaxe ._.
Pour le format, j'ai des doutes. C'est le fichier d'un collègue biologiste, et il travaille sous windows je crois; je ne sais pas comment il a généra le fichier.

Watael a écrit :

salut,

on peut avoir un échantillon représentatif du fichier ?
il est bien au format unix (\n et pas \r\n, ni \r) ?

Dernière modification par Micawber (Le 23/03/2017, à 14:45)

Hors ligne

#4 Le 23/03/2017, à 14:52

Micawber

Re : AWK : opérations colonne alternant entiers et chaînes de caractères

Edit : ok ça marche avec -F'\t' !

UN autre petit truc, le nouveau fichier créé avec les valeurs modifiées à une ligne en plus, vide à la fin du fichier. Pas moyen de la supprimer : ou bien ça ne fait rien, ou bien ça supprime l'avant dernière ligne. C'est le format qui pourrait causer ça ?

Hors ligne