J'essaie de compter le nombre de lignes après une ligne problématique dans un fichier csv. Je sais que je peux utiliser la grep -a #
syntaxe pour afficher # nombre de lignes après qu'une correspondance a été trouvée. Je ne m'intéresse qu'au nombre réel de lignes. Je me rends compte que je pourrais définir le nombre à MAX_INT, le canaliser dans un fichier et faire un peu plus de traitement.
Je suis à la recherche d'un one-liner succinct pour me dire le nombre.
Aucune suggestion?
grep -m1 match >/dev/null
bien sûr supprimer l'impression du premier match . Et votre deuxième problème est un GNUsed
- il ne réinitialise pas son décalage d'entrée par spécification. Vous devez utiliser-u
w / GNU - ce qui n'est pas toujours souhaitable. J'aurais pu être plus clair, mais mon hypothèse était qu'un GNUgrep
et GNUsed
viendraient par paires. Je pense que, aussi,grep -qm1
pourrait fonctionner pour raccourcir la/dev/null
redirection - mais GNUgrep
fait des choses étranges avec-q
et je ne me souviens pas comment ces deux fonctionnent ensemble.wc -l
c'est un peu moins cher quegrep -c ''
.Voici une façon.
la source
Une autre façon - l'utilisation de
dc
est un peu ésotérique, mais semble bien fonctionner ici:sed
rechercheprob.txt
«problème» et la dernière ligne et utilise la=
commande pour afficher le numéro de ligne des deux.dc
lit ces deux valeurs sur la pile, les inverse, soustrait et imprime la différence.la source
Entièrement avec sed (bien que deux commandes avec un tuyau)
Supprime toute la ligne avant la ligne, puis la commande suivante compte les lignes du nouveau fichier.
la source
Cela devrait supprimer toutes les lignes jusqu'à (et y compris) la ligne problématique, puis compter les lignes restantes:
la source