Tato otázka již má odpovědi zde :

Komentáře

  • Autor způsobem, na základě vašeho příkladu zde, by vás mohla zajímat naše sesterská stránka Bioinformatika .
  • Chyboval jsem na straně zatahování moje vlastní blízké hlasování, protože odpovědi na související otázku, které mě nejvíce přesvědčí, jsou ty, které předpokládají možnost - a současné takové odpovědi buď vyžadují PCRE (což se nevyžaduje zde), nebo předpokládejte znak mezery ASCII jako oddělovač, nikoli znak tabulátoru.

Odpovědět

S awk:

Komentáře

  • Nice touch w / the total!
  • Plus může používat awk '{print $1}' <inputfile|sort -n|uniq -c získejte souhrn frekvencí počtu značek.
  • Není třeba nepřímo inputfile používat <, ale ano.

Odpověď

Otázka v těle

Vyberte řádky, které začínají 1 a za nimi je mezera

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

Tím se také získá počet řádků (bez nutnosti volání na wc)

Otázka v nadpisu

A 1 not následované dalším číslem (nebo nic):

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

Ale obě výše uvedená řešení mají některé zajímavé problémy, čtěte dál.


V těle otázky uživatel tvrdí, že soubor je „oddělován tabulátory“.

Oddělovač

tab

Řádek začínající wi th a 1 následovaný záložkou (skutečná záložka v příkazu). To se nezdaří, pokud je oddělovač mezera (nebo jakýkoli jiný, nebo žádný):

grep "^1 " file 

mezera

Řádek začínající znakem 1 následovaný mezerou (skutečná mezera v příkazu). To se nezdaří, pokud je oddělovač jiný nebo žádný:

grep "^1 " file 

karta nebo mezera

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

mezery

Pružnější možností je zahrnout několik mezer (vodorovných a svislých) znaků. Sada znaků [:space:] se skládá z (mezera), \t (vodorovná karta ), \r (návrat vozíku), \n (nový řádek), \v (svislá karta ) a \f (zdroj formuláře). Grep ale nemůže odpovídat novému řádku (jedná se o vnitřní omezení, kterému se lze vyhnout pouze pomocí možnosti -z). Je možné jej použít jako popis na oddělovači. Je také možné a kratší použít GNU dostupnou zkratku \s:

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

Ale tato možnost selže, pokud je oddělovač něco jako dvojtečka : nebo jakýkoli jiný interpunkční znak (nebo jakékoli písmeno).

Hranice

Nebo, můžeme použít přechod z číslice na hranici „ne číslice“, vlastně, znak, který není v [_[: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 se přijmou platné řádky, které začínají číslicí 1 a za nimi následuje interpunkční znaménko.

Komentáře

  • Není možné, aby řádky prezentované uživatelem: 1 TGCAG… obsahovaly pouze a 1 (tj. bez genomových dat). Ale každopádně se přidalo i životaschopné řešení.@St é phaneChazelas

odpověď

Zní to jako vy chcete toto:

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

Počítající část tohoto:

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

Odpovědět

Kterýkoli z nich vybere řádky s 1 v prvním sloupci

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

Oba je možné rozšířit, takže nepotřebujete ani wc k počítání řádků

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

Odpověď

Použití grep:

grep -c "^1\s" file 

To bude odpovídat libovolnému řádku začínajícímu 1 bezprostředně následovanou mezerami a poskytne počet těchto řádků (eliminuje potřebu wc -l)


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

Odpověď

Dobré odpovědi zde, ale za předpokladu že ne každý řádek končí mezerou (jako kdybyste šli Někteří, kteří se skutečně dostanou do vašeho „=“), můžete použít toto:

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

V zásadě odpovídá libovolnému řádku, který začíná jedním, následovaným neciferný údaj, včetně mezer. Trochu podrobnější, ale také spolehlivější. (Ačkoli stojí za zmínku, že zde není nic pro nulový stav pouze jednoho na řádku, není to citlivé na konec řádku.)

Komentáře

  • Upozorňujeme, že zakazuje řádky skládající se pouze z 1. Pokud ' není žádoucí, použijte např. ^1($|[^0-9])

odpověď

Můžete také použít následující řádek:

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

Parametr -F dělá z oddělovače polí prázdné znaky . Pokud je hodnota prvního pole „1“, vytiskne se jeho řádek.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *