Tähän kysymykseen on jo annettu vastauksia :

Kommentit

  • tavalla, esimerkkisi perusteella, saatat olla kiinnostunut sisarsivustostamme Bioinformatiikka .
  • Olen erehtynyt vetäytymisen puolella oma läheinen äänestykseni, koska eniten vakuuttavat linkitettyyn kysymykseen annetut vastaukset ennakoivat - mahdollisuutta, ja nykyiset vastaukset joko vaativat PCRE: tä (jota ei vaadita) tässä), tai oletetaan, että ASCII-välilyönti on erotin, ei sarkainmerkki.

Vastaa

Kanssa awk:

Kommentit

  • Mukava kosketus / summa!
  • Plus voi käyttää awk '{print $1}' <inputfile|sort -n|uniq -c hae yhteenveto tunnistemäärän taajuuksista.
  • Ei tarvitse välitellä inputfile välillä <, mutta kyllä.

Vastaa

kehon kysymys

Valitse rivit, jotka alkavat 1 ja joita seuraa välilyönti

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

Tämä antaa myös määrän riviä (ilman wc-kutsua)

Otsikossa oleva kysymys

A 1 ei , jota seuraa toinen numero (tai ei mitään):

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

Mutta molemmilla yllä olevilla ratkaisuilla on Joitakin mielenkiintoisia asioita, jatka lukemista.


Kysymyksen rungossa käyttäjä väittää, että tiedosto on ”sarkain erotettu”.

Erotin

välilehti

Rivi, joka alkaa wi: llä a 1, jota seuraa sarkain (todellinen välilehti komennossa). Tämä epäonnistuu, jos erotin on välilyönti (tai jokin muu tai ei mitään):

grep "^1 " file 

välilyönti

Rivi, joka alkaa merkillä 1, jota seuraa välilyönti (todellinen tila komennossa). Tämä epäonnistuu, jos erotin on jokin muu tai ei mitään:

grep "^1 " file 

-välilehti tai välilyönti

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

välilyönti

Joustavampi vaihtoehto on sisällyttää useita välilyöntejä (vaaka- ja pystysuoria) merkkejä. Merkkiluokka [:space:] koostuu (välilyönti), \t (vaakavälilehti) ), \r (vaunun paluu), \n (uusi rivi), \v (välilehti ) ja \f (lomakesyöte). Grep ei kuitenkaan voi täsmätä uudella rivillä (se on sisäinen rajoitus, joka voidaan välttää vain -z -vaihtoehdolla). On mahdollista käyttää sitä kuvauksena erottimessa. On myös mahdollista ja lyhyempi käyttää GNU: n käytettävissä olevaa lyhentettä \s:

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

Mutta tämä vaihtoehto epäonnistuu, jos erotin on kaksoispiste : tai mikä tahansa muu välimerkki (tai mikä tahansa kirjain).

Raja

Tai voimme käyttää siirtymistä numerosta ”ei numero” -rajaan, hyvin, itse asiassa ”merkkiin, joka ei ole [_[: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). 

Tämä hyväksytään kelvollisiksi riveiksi, jotka alkavat 1: llä ja joita seuraa välimerkkejä.

Kommentit

  • Ei ole mahdollista, että käyttäjän esittämät rivit: 1 TGCAG… sisältävät vain a 1 (eli ilman genomitietoja). Mutta joka tapauksessa, myös toimiva ratkaisu lisättiin.@St é phaneChazelas

Vastaa

Kuulostaa siltä kuin sinä vain haluavat tämän:

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

Tämän laskentaosuus:

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

Vastaa

Kumpikin näistä valitsee rivit, joiden ensimmäisessä sarakkeessa 1

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

Näitä molempia voidaan laajentaa, joten et edes tarvitse wc -viivojen laskemista

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

Vastaa

Käyttämällä grep:

grep -c "^1\s" file 

Tämä vastaa mitä tahansa riviä, joka alkaa 1: llä ja jota seuraa välittömästi välilyönti, ja antaa näiden rivien määrän (poistetaan tarve wc -l)


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

Vastaa

Hyviä vastauksia täällä, mutta olettaen että kaikki linjat eivät pääty tilaan (kuten jos olet mennyt Jos jotkut todella pääsevät ”=”), voit käyttää tätä:

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

Se vastaa periaatteessa mitä tahansa riviä, joka alkaa yhdellä, jota seuraa ei-numeroinen, mukaan lukien välilyönti. Hieman tarkempi, mutta myös hämmentävämpi. (Vaikka on syytä huomata, että täällä ei ole mitään vain yksi-on-the-line-tilassa, se ei ole ”rivin lopun herkkä”.)

Kommentit

  • Huomaa, että se estää rivejä, jotka koostuvat vain -kohdasta 1. Jos ' ei ole haluttu, käytä esim. ^1($|[^0-9])

vastaus

Voit käyttää myös rivin alapuolella:

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

Parametri -F tekee kentän erottimesta välilyönnin Jos ensimmäisen kentän arvo on ”1”, sen rivi tulostetaan.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *