Kommentarer
Svar
Med awk
:
Kommentarer
- Nice touch w / the total!
- Plus kan bruge
awk '{print $1}' <inputfile|sort -n|uniq -c
få en oversigt over frekvenserne for taggetal. - Ingen grund til at indirekte
inputfile
med<
, men ja faktisk.
Svar
Spørgsmålet i kroppen
Vælg linjer, der starter med et 1
og efterfølges af et mellemrum
grep -c "^1\s" file grep -c "^1[[:space:]]" file
Det giver også optællingen af linjer (uden behov for opkaldet til wc)
Spørgsmålet i titlen
A 1
ikke efterfulgt af et andet nummer (eller intet):
grep -cE "^1([^0-9]|$)" file
Men begge løsninger ovenfor har nogle interessante spørgsmål, fortsæt med at læse.
I selve spørgsmålet hævder brugeren, at filen er “tabuleret afgrænset”.
Afgrænser
fane
En linje, der starter med th en 1
efterfulgt af en fane (en faktisk fane i kommandoen). Dette mislykkes, hvis afgrænseren er et mellemrum (eller et hvilket som helst andet eller intet):
grep "^1 " file
mellemrum
En linje, der starter med en 1
efterfulgt af et mellemrum (et faktisk mellemrum i kommandoen). Dette mislykkes, hvis afgrænseren er en anden eller ingen:
grep "^1 " file
fane eller mellemrum
grep "^1( | )" file grep "^1[[:blank:]]" file
mellemrum
En mere fleksibel mulighed er at inkludere flere mellemrumstegn (vandret og lodret). [:space:]
tegnklassesættet består af (mellemrum),
\t
(vandret fane ), \r
(vognretur), \n
(ny linje), \v
(lodret fane ) og \f
(form feed). Men grep kan ikke matche en ny linje (det er en intern begrænsning, der kun kunne undgås med valgmuligheden -z
). Det er muligt at bruge det som en beskrivelse på afgrænseren. Det er også muligt og kortere at bruge den tilgængelige GNU-stenografi af \s
:
grep -c "^1[[:space:]]` file grep -c "^1\s" file
Men denne mulighed mislykkes, hvis afgrænseren er noget, der ligner et kolon :
eller et andet punktum (eller et hvilket som helst bogstav).
Grænse
Eller, vi kan bruge overgangen fra et ciffer til en “ikke et ciffer” -grænse, ja, faktisk “et tegn, der ikke er i [_[: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).
Dette accepteres som gyldige linjer, der starter med en 1 og efterfølges af nogle tegnsætningstegn.
Kommentarer
- Der er ingen måde, at linjerne præsenteret af brugeren:
1 TGCAG…
kun a1
(dvs. uden genomiske data). Men alligevel tilføjede en levedygtig løsning også.@St é phaneChazelas
Svar
Lyder som om du bare ønsker dette:
$ grep "^1\b" a 1 TGCAG..... 1 TGCAG......
For tælledelen af dette:
$ grep -c "^1\b" file 2
Svar
En af disse vælger linjer med en 1
i den første kolonne
awk "$1 == 1" grep -w "^1"
Disse kan begge udvides, så du ikke engang har brug for wc
for at tælle linjerne
awk "$1==1 { x++ } END { print x }" grep -cw "^1"
Svar
Brug af grep
:
grep -c "^1\s" file
Dette vil matche enhver linje, der starter med en 1, umiddelbart efterfulgt af mellemrum og giver et antal af disse linjer (eliminerer behovet for wc -l
)
$ cat input 79 TGCAG..... 1 TGCAG..... 1257 TGCAG..... 1 TGCAG...... $ grep -Ec "^1\s" input 2
Svar
Gode svar her, men forudsat at ikke hver linje ender i et mellemrum (som hvis du er gået t nogle, der faktisk gør det til din “=”), kan du bruge dette:
grep -c "^1[^0-9]" file
Det svarer stort set til enhver linje, der begynder med en, efterfulgt af et ikke-cifret, inklusive hvidt rum. Lidt mere detaljeret, men også mere idiotsikker. (Selvom det er værd at bemærke, at der ikke er noget her for nulstilstanden for bare en-på-linjen, er den ikke følsom på slutningen af linjen.)
Kommentarer
- Bemærk, at det ikke tillader linjer, der kun består af
1
. Hvis det ' er ikke ønsket, brug f.eks.^1($|[^0-9])
Svar
Du kan også bruge nedenstående linje:
$ awk -F" " "{if($1=="1") print $0}" <your file name> | wc -l
Parameteren -F
gør feltadskilleren til et mellemrum Hvis det første felt “s værdi er” 1 “, udskrives dets linje.
-
, og de nuværende sådanne svar kræver enten PCRE (hvilket ikke er nødvendigt her), eller antag ASCII-mellemrumstegn som en afgrænser, ikke et tabulatortegn.