Kommentarer
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 a1
(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.
-
, 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.