Dette spørgsmål har allerede svar her :

Kommentarer

  • Af måde, baseret på dit eksempel her, kan du være interesseret i vores søsterside, Bioinformatik .
  • Jeg har begået en fejl ved siden af tilbagetrækningen min egen tætte afstemning, fordi svarene på det sammenkædede spørgsmål, der mest overbeviser mig, er dem, der foregriber muligheden for -, 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.

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 a 1 (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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *