comment lire une ligne sur 3 d'un fichier texte ? [awk (ou autre)] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 22-12-2009 à 14:41:32
en algorithmique simple, tu peux faire ça comme ça :
compteur = 0 |
à toi de traduire dans ton langage préféré
Marsh Posté le 22-12-2009 à 14:47:23
mon langage préféré ? le français !
désolé, je suis ignare en terme de programmation, ce n'est pas mon métier !
A part quelques rudiments de bash, je ne sais pas faire grand chose...
Marsh Posté le 22-12-2009 à 15:08:17
cactus a écrit : désolé, je suis ignare en terme de programmation, ce n'est pas mon métier ! |
euh ouais m'enfin là quand même, ça va devenir compliqué quoi
Marsh Posté le 22-12-2009 à 15:22:24
Je sais juste que awk est capable de le faire, mais je n'ai pas les compétences pour l'écrire.
Je lis les manuels (en anglais, pas facile ! ), mais je ne trouve pas mon bonheur.
Et pourtant, ça n'est pas si complexe dans le principe, c'est du style :
i=1
tant que i<978 (mon nb de lignes)
cat ou print de la ligne i > enregistrer dans l'output.txt
i=i+3
Marsh Posté le 22-12-2009 à 15:27:22
ton bout de machin là, ça ressemblerait pas à ce que j'ai posté tout en haut, mais en plus pourri des fois ?
Marsh Posté le 22-12-2009 à 15:32:49
possible !
(j'avais pas compris ton exemple, mais là, en le relisant, je viens de piger ! )
donc oui, c'est bien ce que je veux faire, mais il me manque jsute les commandes bash/awk/autre...
Marsh Posté le 22-12-2009 à 15:36:25
Et juste pour savoir, pourquoi on te demande ça à toi alors que tu ne sais pas programmer ?
Marsh Posté le 22-12-2009 à 15:38:03
wedgeant a écrit : Et juste pour savoir, pourquoi on te demande ça à toi alors que tu ne sais pas programmer ? |
c'est un exo pour apprendre
Marsh Posté le 22-12-2009 à 15:42:01
non, je bosse sur des calculs de structures (modèles éléments finis) et là, on me demande de trier des résultats en format texte pour les inclure dans des feuilles excel (ce que je n'ai jamais fait en 10 ans de carrière)
Marsh Posté le 22-12-2009 à 15:42:53
cactus a écrit : non, je bosse sur des calculs de structures (modèles éléments finis) et là, on me demande de trier des résultats en format texte pour les inclure dans des feuilles excel (ce que je n'ai jamais fait en 10 ans de carrière) |
et matlab ne sais pas faire ça (euh, du taillage dans du txt brut)?
Marsh Posté le 22-12-2009 à 15:46:55
matlab... ça fait 10 ans que je n'y ai plus touché (c'était en école !)
c'est encore utilisé ? ça fait un bail que je ne l'ai plus vu tourner !
(cela dit, même avec matlab, je ne sais pas faire, c'est dire...)
Pour info, ma spécialité, c'est NASTRAN (code de calcul), dans toutes ses formes... analyses linéaires ou non, avec contact ou non, etc... voilà ! chacun ses compétences !
Marsh Posté le 22-12-2009 à 15:52:03
un ami utilise encore matlab pour ses calculs matriciels (bon ce sont des très très grandes matrices).
moi je l'avais en effet utilisé pour la dernière fois à l'école de géologie pour des tracés souterrain; des équilignes
de champ electrostatique si je me rapelle bien.
Marsh Posté le 23-12-2009 à 23:38:16
Code :
|
Bon ok, les redirections du debut c'est du vieux hack des famille, c'est un workaround sinon awk n'affiche pas la premiere ligne. Mais si vous avez du temps à consacrer, optimisez mon awk
Marsh Posté le 26-12-2009 à 01:41:56
le cahier des charges est imprécis : une ligne sur trois, certes, mais statistiquement une ligne sur trois ? algorithme à tester sur un fichier avec un grand nombre de lignes ?
sinon, si il faut lire une ligne et en passer deux, ok, mais quelle est celle des 3 premières lignes qu'il faut lire ?
Marsh Posté le 26-12-2009 à 09:05:18
merci sputnick et Ttienne.
(et joyeux noêl ! )
sputnick : je testerai ton code à mon retour de vacances.
Ttienne : non, rien de statistique, j'ai juste une liste de "noms" qui se répète 3 fois (ligne 1 à 3, 4 à 6 etc...). Donc il me suffit de lire une des 3 premières lignes puis de sauter systématiquement 3 lignes.
Mon fichier fait presque 1000 ligne, soit presque 330 lignes à récupérer.
Marsh Posté le 10-01-2015 à 16:18:02
Bonjour,
Pour un fichier avec si peu de lignes, n'importe quel logiciel est capable de faire ça.
Prenons R. Je n'ai jamais fait ça, et je n'ai rien sous le coude pour tester, alors essayer ça :
MonFichier = read.table('Votre fichier .txt') ;
N = now( MonFichier ) ## longueur du fichier
K = 0 ;
for (i in now( MonFichier ):1) {
K = K+1 ;
if (K<3) {
MonFichier = MonFichier[-i,] ; ## sppression de la ligne i
}
if (K>=3) {
K=0 ;
}
}
Marsh Posté le 10-01-2015 à 16:50:50
compteur=3;seq 1 30 | awk -v patt="$compteur" 'NR % patt == 0'
3
6
9
12
15
18
21
24
27
30
Marsh Posté le 20-01-2015 à 11:32:04
cactus a écrit : |
Bon j'imagine qu'après 10 jours tu as ta solution, mais sinon, tu te complique la vie pour rien. De ce que je lit, il te suffit plutôt de supprimer les doublons. Du coup
Code :
|
suffit pour répondre à ton besoin
Marsh Posté le 22-12-2009 à 14:22:04
Bonjour à tous,
Je n'y connais rien en programmation, et j'aimerais pouvoir lire une ligne sur 3 d'un fichier texte (et enregistrer la sorite dans un autre fichier).
Y aurait-il un gourou de la programmation dans le coin ?
Merci !