valeurs plus grande que

valeurs plus grande que - Shell/Batch - Programmation

Marsh Posté le 11-03-2016 à 16:31:21    

Bonjour,
 
J'ai ecrit un script que voila:
 

Code :
  1. #!/bin/bash
  2. cat values_EU_2L_1.csv | while IFS=',' read t r m
  3. do
  4. ./ms 12 100 -t ${t} -eN 0.022 0.72 -eN 0.15 0.06 -eN 0.18 0.59 -r ${r} 1000 | ./sample_stats | cut -f 4 | > Outputemp_S_A_EU.csv
  5. cat Outputemp_S_A_EU.csv | if $m > Outputemp_S_A_EU.csv
  6. echo "nombre de valeurs" >> Output_S_A_EU.csv
  7. rm Outputemp_S_A_EU.csv
  8. done


 
Ce script lit le fichier values_EU_2L_1.csv qui ressemble a ca:
colonne1  colonne2   colonne 3
valeurs t   valeurs r   valeurs m
10              200          2  
15              150          3
.....         .....           .....
 
Ensuite, j'utilise le programme ms pour calculer des statistiques et j'obtiens le fichier Outputemp_S_A_EU.csv qui ressemble a ca:
 
colonne
2
5
6
......
 
Le probleme que j'ai se situe apres, je voudrais savoir le nombre de valeurs superieur a  la valeur m qui se trouve dans la 3em colonne de mon fichier "values_EU_2L_1.csv"
Par example, pour la 1er ligne, j'ai ma liste de valeurs calculees pour les parametres 10 et 100 et je voudrais savoir combien de valeurs dans cette liste (donc dans le fichier temporaire) sont superieur a 2.
A la fin je voudrais un fichier avec pour chaque ligne de parametres du fichier "values_EU_2L_1.csv", le nombre de valeurs superieur au m correspondant a la meme ligne.
 
je pense que cette partie du script est fausse,
 

Code :
  1. cat Outputemp_S_A_EU.csv | if $m > Outputemp_S_A_EU.csv
  2. echo "nombre de valeurs" >> Output_S_A_EU.csv


 
Pourriez-vous m'aider avec le script?
Merci.
 
J'espere avoir ete assez claire.
 
Myriam


Message édité par cmyriam le 16-03-2016 à 14:06:27
Reply

Marsh Posté le 11-03-2016 à 16:31:21   

Reply

Marsh Posté le 15-03-2016 à 17:22:11    

Bonjour,  
 
J'ai essaye de resoudre mon probleme et j'ai cree 2 scripts: 1 en bash et l'autre avec R.
 
Cependant les 2 ne fonctionnnent toujours pas:
 
Voila le premier en R:
 

Code :
  1. #!/usr/bin/Rscript
  2. data_csv <- read.table("data.csv",sep=",",header=F) # data.csv = values_EU_2L_1.csv
  3. counter_values<-c()
  4. for(i in 1:dim(data_csv)[1])
  5. {
  6.    counter <-0
  7.    system(paste("./ms 12 100 -t ",data_csv[i,1]," -eN 0.022 0.72 -eN 0.15 0.06 -eN 0.18 0.59 -r ",data_csv[i,2]," 1000 | ./sample_stats | cut -f 4 > Output_temp.csv",sep="" ))
  8.    data_temp <- read.table("Output_temp.csv",sep=",",header=F)
  9.    for(j in 1: dim(data_temp)[1])
  10.    {
  11.      if(data_csv[i,3]>data_temp[j,1])
  12.        counter <- counter+1
  13.    }
  14.   counter_values <- c(counter_values,counter)
  15.   system("rm Output_temp.csv" )
  16. }
  17. write.table(counter_values,"counter_file.txt" )


 
Le probleme est que lorsque je veux le lancer avec qsub, j'ai le message d'erreur:
Syntax error: “(” unexpected
 
Je n'arrive pas a trouver quel est l'erreur dans mon script.
 
 
Quand au script en bash, le voila:

Code :
  1. #!/bin/bash
  2. file="counter_file.txt"
  3. cat data.csv | while IFS=',' read t r m
  4. do
  5. ./ms 12 100 -t ${t} -eN 0.022 0.72 -eN 0.15 0.06 -eN 0.18 0.59 -r ${r} 1000 | ./sample_stats | cut -f 4 > Output_temp.csv
  6. counter=0
  7. cat Output_temp.csv | while read temp
  8. do
  9. if [ "${m}" \> "${temp}" ]; then
  10.   counter=$((counter+1));
  11. fi
  12. done
  13. echo " $counter"
  14. rm Output_temp.csv
  15. done


 
La encore, le fichier a la fin ne me donne que 0 et non les valeurs que je veux.
Si quelqu'un pouvait m'aider, ca serait vraiment super.
 
Merci d'avance,
Myriam


Message édité par cmyriam le 15-03-2016 à 17:23:24
Reply

Marsh Posté le 29-03-2016 à 06:31:27    

salut,
 
je ne vais pas pouvoir t'aider pour le script en R. :(
 
pour le script bash, deux choses (au moins) :
1- un pipe crée un sous-interpréteur.
tout comme un script, les variables qui y sont assignées n'existent pas dans l'environnement parent.
un fichier se lit, en shell, sans cat, en redirigeant le contenu du fichier vers la commande read, ainsi :

Code :
  1. while read line; do echo "$line"; done < fichier


2- il existe des opérateurs arithmétiques pour les tests (voir : help test); > est un opérateur de comparaison pour les textes.
 
les fichiers temporaires sont à éviter : ils ralentissent énormément les scripts.
combien de lignes comporte Output_temp.csv ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed