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 à :

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
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.......).

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 :
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
Le fichier fais 340 000 lignes, le séparateur dans le fichier source est la tabulation.

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 (>.<)

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
Si quelqu'un peut m'aider s'il vous plaît !!