#1 Le 23/03/2017, à 11: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, à 12: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.
Hors ligne
#3 Le 23/03/2017, à 13: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.
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, à 13:45)
Hors ligne
#4 Le 23/03/2017, à 13: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