<åt sidan class = "s-meddelande s-meddelande__info js-post- varsel mb16 "role =" status ">

Denna fråga har redan svar här :

Kommentarer

  • Av sätt, baserat på ditt exempel här, kanske du är intresserad av vår systerwebbplats, Bioinformatik .
  • Jag har gjort fel på sidan att dra tillbaka min egen nära omröstning, eftersom svaren på den länkade frågan som mest övertygar mig, är de som förutspår möjligheten att -, och de aktuella svaren kräver antingen PCRE (vilket inte krävs här), eller antag ASCII-mellanslagstecken som en avgränsare, inte ett tabbtecken.

Svar

Med awk:

Kommentarer

  • Snygg touch med totalen!
  • Plus kan använda awk '{print $1}' <inputfile|sort -n|uniq -c få en sammanfattning av taggfrekvenserna.
  • Inget behov av att indirekt inputfile med <, men ja verkligen.

Svar

Frågan i kroppen

Välj rader som börjar med ett 1 och följs av ett mellanslag

grep -c "^1\s" file grep -c "^1[[:space:]]" file 

Som också ger räkningen av rader (utan att behöva ringa till wc)

Frågan i titeln

A 1 inte följt av ett annat nummer (eller ingenting):

grep -cE "^1([^0-9]|$)" file 

Men båda lösningarna ovan har några intressanta problem, fortsätt läsa.


I själva frågan påstår användaren att filen är ”tabbavgränsad”.

Avgränsare

flik

En rad som börjar med th a 1 följt av en flik (en faktisk flik i kommandot). Detta misslyckas om avgränsaren är ett mellanslag (eller något annat eller inget):

grep "^1 " file 

mellanslag

En rad som börjar med en 1 följt av ett mellanslag (ett verkligt mellanslag i kommandot). Detta misslyckas om avgränsaren är någon annan eller ingen:

grep "^1 " file 

flik eller mellanslag

grep "^1( | )" file grep "^1[[:blank:]]" file 

mellanslag

Ett mer flexibelt alternativ är att inkludera flera mellanslag (horisontella och vertikala) tecken. [:space:] teckenklassuppsättning består av (mellanslag), \t (horisontell flik ), \r (vagnretur), \n (ny linje), \v (vertikal flik ) och \f (formulärflöde). Men grep kan inte matcha en ny linje (det är en intern begränsning som endast kan undvikas med alternativet -z). Det är möjligt att använda den som en beskrivning på avgränsaren. Det är också möjligt och kortare att använda den tillgängliga GNU-förkortningen för \s:

grep -c "^1[[:space:]]` file grep -c "^1\s" file 

Men det här alternativet misslyckas om avgränsaren är ungefär som ett kolon : eller något annat skiljetecken (eller vilken bokstav som helst).

Gräns

Eller, vi kan använda övergången från en siffra till en ”inte en siffra” -gräns, ja, faktiskt ”ett tecken som inte finns 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). 

Detta accepteras som giltiga rader som börjar med en 1 och följs av något skiljetecken.

Kommentarer

  • Det finns inget sätt att raderna som presenteras av användaren: 1 TGCAG… innehåller endast a 1 (det vill säga utan genomiska data). Men hur som helst, en lönsam lösning tillade också.@St é phaneChazelas

Svar

Låter som du bara vill ha det här:

$ grep "^1\b" a 1 TGCAG..... 1 TGCAG...... 

För att räkna delen av detta:

$ grep -c "^1\b" file 2 

Svar

Endera av dessa plockar ut rader med 1 i den första kolumnen

awk "$1 == 1" grep -w "^1" 

Dessa kan båda förlängas så att du inte ens behöver wc för att räkna raderna

awk "$1==1 { x++ } END { print x }" grep -cw "^1" 

Svar

Med grep:

grep -c "^1\s" file 

Detta kommer att matcha alla rader som börjar med en omedelbart följt av tomt utrymme och ger ett antal av dessa rader (vilket eliminerar behovet av wc -l)


$ cat input 79 TGCAG..... 1 TGCAG..... 1257 TGCAG..... 1 TGCAG...... $ grep -Ec "^1\s" input 2 

Svar

Bra svar här, men förutsatt att inte varje rad slutar i ett mellanslag (som om du har gått t några som faktiskt gör det till din ”=”) kan du använda det här:

 grep -c "^1[^0-9]" file 

Det matchar i princip för alla rader som börjar med en, följt av ett icke-siffrigt, inklusive vitt utrymme. Lite mer detaljerad, men också mer idiotsäker. (Även om det är värt att notera att det inte finns något här för nollvillkoret för bara en-på-linjen, är det inte känsligt för slutet på linjen.)

Kommentarer

  • Observera att det inte tillåter rader som endast består av 1. Om det ' önskas inte, använd t.ex. ^1($|[^0-9])

Svar

Du kan också använda nedanstående rad:

$ awk -F" " "{if($1=="1") print $0}" <your file name> | wc -l 

Parametern -F gör fältseparatorn till ett tomt utrymme . Om det första fältets värde är ”1” kommer dess rad att skrivas ut.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *