J'ai un très gros fichier de texte brut (plusieurs gigaoctets) que je dois rechercher pour certaines chaînes. Lors de l'utilisation grep
, Je reçois plus de 11 000 matches d’une chaîne mais avec ag
Je reçois environ 1500. La sortie des deux commandes est la même jusqu'au point où ag
arrête.
Je suis conscient de la -m
option dans ag
définir le nombre maximal de correspondances mais cette valeur par défaut est 10 000 et le problème ne se pose donc pas.
Pour illustrer cela, voici un exemple de ce qui se passe:
$ grep -i 'string' hugefile.txt | wc -l
11000
$ ag -i 'string' hugefile.txt | wc -l
1500
La sortie des deux commandes est identique au même nombre de correspondances:
$ grep -m 1500 -i 'string' hugefile.txt > grep_output.txt
$ ag --no-numbers -i 'string' hugefile.txt > ag_output.txt
$ diff grep_output.txt ag_output.txt
(files identical)
Est-ce que ag
avoir une taille d'entrée implicite maximale et si oui, est-il possible de modifier cela?
Réponses:
Est-il possible que vous ayez eu plusieurs hits (en moyenne 6 à 7) par ligne?
Si tel est le cas, la méthode ci-dessus pour les compter est incorrecte: elle compte uniquement les lignes avec des correspondances, mais pas les correspondances Donc, si vous atteignez déjà la limite de 10000 matchs après 1500 lignes avec des matchs, vous obtiendrez le résultat ci-dessus et ce serait correct .
De plus, la sémantique de
grep
'le sableag
de-m
les options semblent différer:grep
c'est le nombre maximum de lignes lues: Arrête de lire un fichier après NUM lignes correspondantes.ag
c'est le nombre maximum de matchs: Ignorer le reste d'un fichier après la correspondance de NUM.Je suppose donc que vous avez atteint la limite maximale par défaut des correspondances et que vous devez augmenter la valeur transmise à la
-m
option deag
.la source