Bonjour,
dans le cadre de mon stage j'aimerai modifier un fichier à ma convenance pour le traiter par la suite en python, débutante en bash depuis ce matin, tout ne marche pas comme je veux >.< :
le fichier de départ ressemble à :
La première colonne correspond au nom de l'espèce (1 à 22). La deuxième colonne au nom du gène dans cette espèce, de type x|x, xx|x, ... xxxx|xxxx. Les autres colonnes correspondent au nom du gène dans les espèces actuelles descendantes de celle-ci (type : ENSCJA.......).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 22 0|71 ENSGGOP00000021128 ENSCJAP00000039513 ENSMUSP00000023509 ENSRNOP00000050815 21 0|69 ENSGGOP00000021128 ENSCJAP00000039513 ENSMUSP00000023509 ENSRNOP00000050815 17 0|65 ENSGGOP00000021128 ENSCJAP00000039513 15 0|63 ENSGGOP00000021128 11 0|61 ENSGGOP00000021128 10 ENSGGOP00000021128 16 ENSCJAP00000039513 20 0|68 ENSMUSP00000023509 ENSRNOP00000050815 18 ENSMUSP00000023509 19 ENSRNOP00000050815
Je veux récupérer parcourir le fichier ligne par ligne et remplacer UNE fois le nom du gène de l'espèce i chez son ancêtre (une des lignes qui précède). En gros, l'espèce 21 a un gène 0|69 qui correspond aux gènes "ENSGGOP00000021128 ENSCJAP00000039513 ENSMUSP00000023509 ENSRNOP00000050815", je veux récupérer le nom "0|69" et le remplacer à sa première occurrence c'est-à-dire l'espèce 22 0|71 pour obtenir : "22 0|71 0|69".
Je veux obtenir :
Le fichier fais 340 000 lignes, le séparateur dans le fichier source est la tabulation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 22 0|71 0|69 21 0|69 0|65 0|68 17 0|65 0|63 ENSCJAP00000039513 15 0|63 0|61 11 0|61 ENSGGOP00000021128 10 ENSGGOP00000021128 16 ENSCJAP00000039513 20 0|68 ENSMUSP00000023509 ENSRNOP00000050815 18 ENSMUSP00000023509 19 ENSRNOP00000050815
Voici mon code mais il ne me modifie pas les noms de gènes par le nom "xxxx|xxxx" (avec x étant des chiffres). J'ai vu qu'il existait le awk mais pas si simple (>.<)
Si quelqu'un peut m'aider s'il vous plaît !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #! /bin/bash expand -t 1 OUTPUT > OUTPUT2 val=10 while read ligne do nom=$(echo "$ligne" | cut -f2 -d' ' ) # awk {'print $2'} gene=$(echo "$ligne" | cut -f3- -d' ') if [ "${#nom}" -lt "$val" ] then echo "$nom" #echo "$gene" sed -i 's/$gene/$nom/' OUTPUT2 fi done <OUTPUT2 sed 's/ /\t/' OUTPUT2
Partager