0
votes

Analysant plusieurs fichiers CSV en bash par motif avec compteur

supposons que j'ai les fichiers

  • rapport-x-1.CSV li>
  • rapport-x-2.csv li>
  • RAPPORT-X-3.CSV LI>
  • rapport-y-1.csv li>
  • rapport-y-2.csv li>
  • rapport-y-3.csv li> ul>

    Je reçois la dernière valeur de la deuxième colonne avec un peu de formatage p> xxx pré>

    Comment puis-je le faire avec un nombre de fichiers .csv et avoir un compteur sur le dessus? p>

    x1 , 300
    x2 , 250
    x3 , 300
    y1 , 270
    y2 , 250
    y3 , 280
    


3 commentaires

si ($ 1> max) {envie = 2 $; max = 1 $} On dirait que vous voulez la valeur maximale, pas la dernière valeur.


@blackbaddl: Le séparateur de champ par défaut pour AWK est un espace. Si je prends votre exemple de fichier - A Echo 'x1, 300' | awk '{improvement $ 2}' sortirait une virgule et non le numéro de la colonne 2e CSV.


@Kamilcuk oui vous avez raison, mais la première colonne est un compteur croissant de toute façon


3 Réponses :


2
votes

Peut essayer quelque chose comme: xxx

ou peut-être: xxx


1 commentaires

Pourquoi pas analyser LS et Pour le fichier en $ (LS) se cassera s'il ya des espaces blanchisseurs et d'autres caractères dans les noms de fichiers et le fichier $ $ $ peut conduire à des bugs. Utilisez simplement Globbing pour fichier dans * et citation de vos variables. pour fichier en $ (ls) faire si [[$ fichier == * .csv]]; pourquoi pas pour i in * .csv en premier lieu?



2
votes

Pourriez-vous s'il vous plaît essayer de suivre. Puisqu'un échantillon n'est donné que cela ne pouvait pas le tester. Mais cela devrait être plus rapide qu'un pour en boucle qui traverse tous les fichiers CSV et appels awk dans chaque itération.

Vous trouverez les points suivants dans ce programme:

  • Pas besoin d'utiliser un pour boucle pour traverser les fichiers .csv , puisque awk est capable de celui-ci.
  • le code de OP ne prend pas soin d'obtenir x , y des noms de fichier que j'ai ajouté cette logique aussi.
  • On pourrait configurer le nom du fichier de sortie dans commencer la section du code selon le besoin.

    xxx

    typo fixé par op


0 commentaires

0
votes

Pour exécuter un script pour chaque fichier dans un répertoire, vous pouvez utiliser pipep les noms de fichiers et utiliser xargs -n1 : xxx


0 commentaires