95 votes

Prendre la nième colonne dans un fichier texte

J'ai un fichier texte :

1 Q0 1657 1 19.6117 Exp
1 Q0 1410 2 18.8302 Exp
2 Q0 3078 1 18.6695 Exp
2 Q0 2434 2 14.0508 Exp
2 Q0 3129 3 13.5495 Exp

Je veux prendre le 2ème et le 4ème mot de chaque ligne comme ceci :

1657 19.6117
1410 18.8302
3078 18.6695
2434 14.0508
3129 13.5495

J'utilise ce code :

 nol=$(cat "/path/of/my/text" | wc -l)
 x=1
 while  [ $x -le "$nol" ]
 do
     line=($(sed -n "$x"p /path/of/my/text)
     echo ""${line[1]}" "${line[3]}""  >> out.txt
     x=$(( $x + 1 ))
 done

Il fonctionne, mais il est très compliqué et prend beaucoup de temps pour traiter les longs fichiers texte.

Existe-t-il un moyen plus simple de procéder ?

3voto

ingyhere Points 963

Si vous utilisez des données structurées, cela présente l'avantage supplémentaire de ne pas invoquer un processus shell supplémentaire pour exécuter tr et/ou cut ou quelque chose comme ça. ...

(Bien sûr, vous voudrez vous prémunir contre les mauvaises entrées avec des conditionnels et des alternatives saines).

...
while read line ; 
do 
    lineCols=( $line ) ;
    echo "${lineCols[0]}"
    echo "${lineCols[1]}"
done < $myFQFileToRead ; 
...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X