Kommentit
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 a1
(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.
-
mahdollisuutta, ja nykyiset vastaukset joko vaativat PCRE: tä (jota ei vaadita) tässä), tai oletetaan, että ASCII-välilyönti on erotin, ei sarkainmerkki.