Commentaires
Réponse
Avec awk
:
Commentaires
- Belle touche avec le total!
- Plus peut utiliser
awk '{print $1}' <inputfile|sort -n|uniq -c
obtenir un récapitulatif des fréquences de décompte des balises. - Pas besoin de indirect
inputfile
avec<
, mais oui.
Réponse
La question dans le corps
Sélectionnez les lignes commençant par 1
et suivies dun espace
grep -c "^1\s" file grep -c "^1[[:space:]]" file
Cela donnera également le décompte de lignes (sans avoir besoin dappeler wc)
La question dans le titre
A 1
pas suivi dun autre nombre (ou rien):
grep -cE "^1([^0-9]|$)" file
Mais les deux solutions ci-dessus ont quelques problèmes intéressants, continuez à lire.
Dans le corps de la question, lutilisateur affirme que le fichier est « délimité par des tabulations ».
Délimiteur
tab
Une ligne commençant par wi e un 1
suivi dun onglet (un onglet réel dans la commande). Cela échoue si le délimiteur est un espace (ou tout autre, ou aucun):
grep "^1 " file
espace
Une ligne commençant par un 1
suivi dun espace (un espace réel dans la commande). Cela échoue si le délimiteur est autre ou aucun:
grep "^1 " file
tabulation ou espace
grep "^1( | )" file grep "^1[[:blank:]]" file
espaces
Une option plus flexible consiste à inclure plusieurs caractères despacement (horizontaux et verticaux). Le jeu de classes de caractères [:space:]
est composé de (espace),
\t
(tabulation horizontale ), \r
(retour chariot), \n
(nouvelle ligne), \v
(tabulation verticale ) et \f
(form feed). Mais grep ne peut pas correspondre à une nouvelle ligne (cest une limitation interne qui ne pourrait être évitée quavec loption -z
). Il est possible de lutiliser comme description sur le délimiteur. Il est également possible, et plus court, dutiliser le raccourci GNU disponible de \s
:
grep -c "^1[[:space:]]` file grep -c "^1\s" file
Mais cette option échouera si le délimiteur est quelque chose comme un deux-points :
ou tout autre caractère de ponctuation (ou toute lettre).
Frontière
Ou, nous pouvons utiliser la transition dun chiffre à une limite « pas un chiffre », eh bien, en fait « un caractère pas dans [_[:alnum:]]
(_a-zA-Z0-9
) « :
grep -c "^1\b" file # portable but not POSIX. grep -c "^1\>" file # portable but not POSIX. grep -wc "^1" file # portable but not POSIX. grep -c "^1\W" file # portable but not POSIX (not match only a `1`) (not underscore in BSD).
Cela acceptera comme valides les lignes commençant par 1 et suivies dun caractère de ponctuation.
Commentaires
- Il ny a aucun moyen que les lignes présentées par lutilisateur:
1 TGCAG…
contiendront seulement un1
(cest-à-dire sans données génomiques). Mais, de toute façon, une solution viable a également été ajoutée.@St é phaneChazelas
Réponse
On dirait que vous venez voulez ceci:
$ grep "^1\b" a 1 TGCAG..... 1 TGCAG......
Pour la partie de comptage de ceci:
$ grep -c "^1\b" file 2
Réponse
Lun ou lautre de ces éléments sélectionnera les lignes avec un 1
dans la première colonne
awk "$1 == 1" grep -w "^1"
Ceux-ci peuvent tous les deux être étendus afin que vous nayez même pas besoin de wc
pour compter les lignes
awk "$1==1 { x++ } END { print x }" grep -cw "^1"
Réponse
En utilisant grep
:
grep -c "^1\s" file
Cela correspondra à toute ligne commençant par un 1 immédiatement suivi dun espace et fournira un nombre de ces lignes (éliminant le besoin de wc -l
)
$ cat input 79 TGCAG..... 1 TGCAG..... 1257 TGCAG..... 1 TGCAG...... $ grep -Ec "^1\s" input 2
Réponse
De bonnes réponses ici, mais en supposant que toutes les lignes ne se terminent pas par un espace (comme si vous alliez t certains qui atteignent réellement votre « = »), vous pouvez utiliser ceci:
grep -c "^1[^0-9]" file
Il correspond essentiellement à toute ligne commençant par un, suivi de un non-chiffre, y compris un espace blanc. Un peu plus verbeux, mais aussi plus infaillible. (Bien que cela vaille la peine de noter quil ny a rien ici pour la condition nulle de just-one-on-the-line, elle nest pas sensible à la fin de la ligne.)
Commentaires
- Notez quil interdit les lignes constituées uniquement de
1
. Si cela ' nest pas souhaité, utilisez par exemple^1($|[^0-9])
Answer
Vous pouvez également utiliser la ligne ci-dessous:
$ awk -F" " "{if($1=="1") print $0}" <your file name> | wc -l
Le paramètre -F
fait du séparateur de champ un espace blanc . Si la valeur du premier champ est « 1 », sa ligne sera imprimée.
-
, et les réponses actuelles nécessitent soit PCRE (ce qui nest pas obligatoire ici), ou prenez le caractère despace ASCII comme délimiteur, pas comme caractère de tabulation.