GNU/Linux >> Tutoriels Linux >  >> Linux

Compter le nombre de lignes avec une chaîne apparaissant N fois dans plusieurs colonnes ?

J'ai plusieurs centaines de fichiers texte composés chacun de cinq colonnes délimitées par des tabulations. La première colonne contient un index et les quatre suivantes le nombre d'occurrences. Maintenant, je voudrais compter le nombre de lignes contenant 3 colonnes avec 0 (c'est-à-dire 7 lignes dans l'exemple ci-dessous).

1   0   0   0   9
2   0   9   0   0
3   10  0   0   0
4   0   10  4   0
5   0   0   0   10
6   0   0   0   10
7   0   0   0   10
8   0   10  0   0
9   5   0   5   0

Je peux coder cela comme une boucle dans R, mais comme les fichiers d'origine contiennent chacun plus de 60 millions de lignes, je me demande s'il n'y a pas de solution de contournement avec awk ou sed et wc -l.

Réponse acceptée :

Utilisation de GNU sed :

sed -E 's/\t0\>/&/3;t;d' file  | wc -l

Comme l'a souligné Isaac, si nous voulons compter exactement 3, faites ceci :

sed -n 's/\t0\>//4;t;s//&/3p' file | wc -l

Linux
  1. Utilisation de plusieurs modèles à la fois avec la commande Sed

  2. Ne renvoyer que la chaîne correspondante dans Sed ?

  3. Comment remplacer une chaîne par une chaîne contenant une barre oblique avec Sed ?

  4. Sed :Supprimer toutes les occurrences d'une chaîne, sauf la première ?

  5. Travailler avec des colonnes - Awk et Sed ?

5 façons de compter le nombre de lignes dans un fichier

Ajouter un mot à la fin de la ligne avec Sed ?

Comment écrire une chaîne de plusieurs lignes en utilisant Bash avec des variables ?

Comment puis-je compter le nombre de caractères dans une variable Bash

remplacer les lignes d'un fichier par les lignes d'un autre par numéro de ligne

plusieurs interfaces physiques avec des IP sur le même sous-réseau