Questa domanda ha già una risposta qui :

Commenti

  • Dal modo, sulla base del tuo esempio qui, potresti essere interessato al nostro sito gemello, Bioinformatica .
  • Ho sbagliato a ritirare il mio voto più stretto, perché le risposte alla domanda collegata che più mi convincono sono quelle che anticipano la possibilità di -, e le attuali risposte di questo tipo richiedono PCRE (che non è richiesta qui), oppure assumi uno spazio ASCII come delimitatore, non un carattere di tabulazione.

Rispondi

Con awk:

Commenti

  • Bel tocco con il totale!
  • Inoltre può usare awk '{print $1}' <inputfile|sort -n|uniq -c ottiene un riepilogo delle frequenze di conteggio dei tag.
  • Non è necessario indirizzare inputfile con <, ma sì, davvero.

Risposta

La domanda nel corpo

Seleziona le righe che iniziano con 1 e sono seguite da uno spazio

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

Questo indicherà anche il conteggio di righe (senza bisogno della chiamata a wc)

La domanda nel titolo

A 1 non seguito da un altro numero (o niente):

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

Ma entrambe le soluzioni precedenti hanno alcuni problemi interessanti, continua a leggere.


Nel corpo della domanda lutente afferma che il file è “delimitato da tabulazioni”.

Delimitatore

tab

Una riga che inizia con wi th una 1 seguita da una tabulazione (una tabulazione effettiva nel comando). Questo non riesce se il delimitatore è uno spazio (o qualsiasi altro, o nessuno):

grep "^1 " file 

spazio

Una riga che inizia con 1 seguito da uno spazio (uno spazio effettivo nel comando). Questo non riesce se il delimitatore è un altro o nessuno:

grep "^1 " file 

tabulazione o spazio

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

spazi

Unopzione più flessibile consiste nellincludere diversi caratteri di spazio (orizzontali e verticali). Il set di classi di caratteri [:space:] è composto da (spazio), \t (tabulazione orizzontale ), \r (ritorno a capo), \n (nuova riga), \v (scheda verticale ) e \f (feed modulo). Ma grep non può abbinare una nuova riga (è una limitazione interna che potrebbe essere evitata solo con lopzione -z). È possibile utilizzarlo come descrizione sul delimitatore. È anche possibile, e più breve, utilizzare labbreviazione GNU disponibile di \s:

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

Ma questa opzione fallirà se il delimitatore è qualcosa come i due punti : o qualsiasi altro carattere di punteggiatura (o qualsiasi lettera).

Confine

Oppure, possiamo usare la transizione da una cifra a un confine “non una cifra”, beh, in realtà “un carattere non in [_[: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). 

Questo accetterà come valide le righe che iniziano con 1 e sono seguite da alcuni caratteri di punteggiatura.

Commenti

  • Non è possibile che le righe presentate dallutente: 1 TGCAG… conterranno solo un 1 (ovvero: senza dati genomici). Ma, comunque, è stata aggiunta anche una valida soluzione.@St é phaneChazelas

Rispondi

Suona come te voglio questo:

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

Per la parte di conteggio di questo:

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

Risposta

Ognuna di queste selezionerà le righe con un 1 nella prima colonna

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

Entrambi possono essere estesi in modo da non “t nemmeno bisogno di wc per contare le righe

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

Risposta

Utilizzo di grep:

grep -c "^1\s" file 

Ciò corrisponderà a qualsiasi riga che inizia con 1 immediatamente seguito da spazi bianchi e fornirà un conteggio di tali righe (eliminando la necessità di wc -l)


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

Risposta

Buone risposte qui, ma supponendo che non tutte le righe terminano con uno spazio (come se tu andassi Per alcuni che effettivamente arrivano al tuo “=”), puoi usare questo:

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

Fondamentalmente corrisponde a qualsiasi riga che inizia con uno, seguito da una non cifra, inclusi gli spazi bianchi. Un po più verboso, ma anche più infallibile. (Anche se vale la pena notare che non cè niente qui per la condizione nulla di solo uno sulla riga, non è sensibile alla fine della riga.)

Commenti

  • Tieni presente che non consente righe composte solo da 1. Se ' non si desidera, utilizzare ad esempio ^1($|[^0-9])

Risposta

Puoi anche utilizzare la riga sotto:

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

Il parametro -F rende il separatore di campo uno spazio bianco Se il valore del primo campo è “1”, la sua riga verrà stampata.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *