Opérations sur des lignes dans un fichier sous linux

Fermé
Clem - 28 avril 2014 à 10:46
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 - 29 avril 2014 à 12:15
Bonjour,
J'ai un fichier composé de 6 colonnes et de plusieurs milliers de lignes, et je voudrai calculer automatiquement la différence entre une valeur d'une ligne de la colonne 6 (en n) par sa précédente (en n-1) (n étant une ligne quelconque). Je voudrai le faire automatiquement pour l'ensemble du fichier, à la condition que les termes de la première colonne soient identiques. En effet, la valeur des termes de la premiere colonne change à intervalle régulier. Et il ne faut pas faire la soustraction de deux termes au moment ou la valeur de la colonne 1 change, mais uniquement quand les valeurs de la colonne 1 sont identiques
Exemple:
1 569 1577 0.569 2486929 1.41506e+06
1 869 1599 0.869 2556801 2.22186e+06
1 1175 1665 1.175 2772225 3.25736e+06
1 1515 1680 1.515 2822400 4275936
1 1855 1699 1.855 2886601 5.35464e+06
1 2200 1735 2.2 3010225 6.6225e+06
1 2500 1855 2.5 3441025 8.60256e+06
111 589 1537 0.589 2362369 1.39144e+06
111 875 1561 0.875 2436721 2.13213e+06
111 1175 1648 1.175 2715904 3.19119e+06
111 1455 1684 1.455 2835856 4.12617e+06
111 1735 1723 1.735 2968729 5.15074e+06
111 2025 1760 2.025 3097600 6272640
111 2325 1842 2.325 3392964 7.88864e+06
111 2685 1990 2.685 3960100 1.06329e+07
211 ...
211 ...
211 ...
.
.
.

Merci beaucoup, je galère à trouver une solution
A voir également:

3 réponses

termgsi Messages postés 678 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 3 novembre 2016 39
28 avril 2014 à 10:59
Bonjour,

As-tu regardé le parsing avec Python
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
28 avril 2014 à 13:54
hello
à vérifier
$ awk '{printf $0; t1[$1, ++n]=$6; if(t2[$1]++)printf "\t%2.5e\n", t1[$1, n]-t1[$1, n-1]; else print ""  }' fichier
1 569 1577 0.569 2486929 1.41506e+06
1 869 1599 0.869 2556801 2.22186e+06 8.06800e+05
1 1175 1665 1.175 2772225 3.25736e+06 1.03550e+06
1 1515 1680 1.515 2822400 4275936 1.01858e+06
1 1855 1699 1.855 2886601 5.35464e+06 1.07870e+06
1 2200 1735 2.2 3010225 6.6225e+06 1.26786e+06
1 2500 1855 2.5 3441025 8.60256e+06 1.98006e+06
111 589 1537 0.589 2362369 1.39144e+06
111 875 1561 0.875 2436721 2.13213e+06 7.40690e+05
111 1175 1648 1.175 2715904 3.19119e+06 1.05906e+06
111 1455 1684 1.455 2835856 4.12617e+06 9.34980e+05
111 1735 1723 1.735 2968729 5.15074e+06 1.02457e+06
111 2025 1760 2.025 3097600 6272640 1.12190e+06
111 2325 1842 2.325 3392964 7.88864e+06 1.61600e+06
111 2685 1990 2.685 3960100 1.06329e+07 2.74426e+06
$
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
29 avril 2014 à 12:15
plus court
awk '{t[++n]=$6; if(t2[$1]++)printf "%s\t%2.5e\n", $0, t[n]-t[n-1]; else print   }' fichier
0