[awk (ou autre)] comment lire une ligne sur 3 d'un fichier texte ?

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: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 ! :jap:

Reply

Marsh Posté le 22-12-2009 à 14:22:04   

Reply

Marsh Posté le 22-12-2009 à 14:41:32    

en algorithmique simple, tu peux faire ça comme ça :

compteur = 0
tant que non(fin de fichier) {
    lire une ligne
    si compteur = 0 alors ecrire la ligne sur le fichier blabla
    compteur++
    si compteur = 2 alors compteur <- 0
}

 

à toi de traduire dans ton langage préféré :o


Message édité par wedgeant le 22-12-2009 à 14:41:37

---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 22-12-2009 à 14:47:23    

mon langage préféré ? le français !  [:le scoub 2]  
 
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... :(

Reply

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 [:mlc]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

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

 


Message édité par cactus le 22-12-2009 à 15:23:26
Reply

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 ? [:gratgrat]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 22-12-2009 à 15:32:49    

possible ! :D  
 
(j'avais pas compris ton exemple, mais là, en le relisant, je viens de piger !  [:bambookillah]  )
 
donc oui, c'est bien ce que je veux faire, mais il me manque jsute les commandes bash/awk/autre...  :sweat:

Reply

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 ? [:petrus dei]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

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 ? [:petrus dei]


c'est un exo pour apprendre :o


---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
Reply

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) :o

Reply

Marsh Posté le 22-12-2009 à 15:42:01   

Reply

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) :o


et matlab ne sais pas faire ça (euh, du taillage dans du txt brut)? :??:


Message édité par memaster le 22-12-2009 à 15:43:21

---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
Reply

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 !) :D
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 ! ;)


Message édité par cactus le 22-12-2009 à 15:47:33
Reply

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.


---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
Reply

Marsh Posté le 23-12-2009 à 23:38:16    

Code :
  1. ( echo; echo; cat <FICHIER> ) > <NOUVEAU_FICHIER>
  2. awk '{if (NR%3 == 0) print}' <NOUVEAU_FICHIER


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


Message édité par sputnick le 23-12-2009 à 23:48:50
Reply

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 ? :D
 
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 ? [:ddr555]
 


---------------
Y a de la bière, sur Véga, hein ? Si y'en a pas, on y va pas ! Et pis c'est tout ! :P | c'est vendu depuis lgtps
Reply

Marsh Posté le 26-12-2009 à 09:05:18    

merci sputnick et Ttienne. ;)
(et joyeux noêl ! :p )
 
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. ;)

Reply

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 ;
  }
}

Reply

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


---------------
Les avis, c'est comme les anus, tout le monde en a un.
Reply

Marsh Posté le 20-01-2015 à 11:32:04    

cactus a écrit :


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


 
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 :
  1. uniq ton_fichier_avec_doublon


 
suffit pour répondre à ton besoin :)

Reply

Sujets relatifs:

Leave a Replay

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