Deze vraag heeft hier al antwoorden :

Reacties

  • Door de op basis van je voorbeeld hier, ben je misschien geïnteresseerd in onze zustersite, Bio-informatica .
  • Ik heb een fout gemaakt bij het intrekken mijn eigen sluitende stem, omdat de antwoorden op de gekoppelde vraag die mij het meest overtuigen, de antwoorden zijn die anticiperen op de mogelijkheid van -, en de huidige dergelijke antwoorden vereisen ofwel PCRE (wat niet vereist is hier), of neem ASCII-spatie aan als scheidingsteken, niet als tab-teken.

Antwoord

Met awk:

Reacties

  • Leuke bijkomstigheid met het totaal!
  • Plus kan awk '{print $1}' <inputfile|sort -n|uniq -c verkrijg een samenvatting van de telfrequenties van de tags.
  • Indirect inputfile met <, maar ja inderdaad.

Antwoord

De vraag in het hoofdgedeelte

Selecteer regels die beginnen met een 1 en worden gevolgd door een spatie

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

Dat geeft ook het aantal regels (zonder de oproep naar wc)

De vraag in de titel

A 1 niet gevolgd door een ander nummer (of niets):

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

Maar beide bovenstaande oplossingen hebben enkele interessante kwesties, blijf lezen.


In de hoofdtekst van de vraag beweert de gebruiker dat het bestand “door tabs gescheiden” is.

Scheidingsteken

tab

Een regel die begint met wi th a 1 gevolgd door een tab (een daadwerkelijke tab in de opdracht). Dit mislukt als het scheidingsteken een spatie is (of een andere, of geen):

grep "^1 " file 

spatie

Een regel die begint met een 1 gevolgd door een spatie (een werkelijke spatie in het commando). Dit mislukt als het scheidingsteken een ander of geen is .:

grep "^1 " file 

tab of spatie

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

witruimte

Een meer flexibele optie is om meerdere spaties (horizontale en verticale) tekens op te nemen. De [:space:] -tekenset is samengesteld uit (spatie), \t (horizontale tab ), \r (regelterugloop), \n (nieuwe regel), \v (verticaal tabblad ) en \f (form feed). Maar grep kan niet overeenkomen met een nieuwe regel (het is een interne beperking die alleen kon worden vermeden met de optie -z). Het is mogelijk om het als omschrijving op het scheidingsteken te gebruiken. Het is ook mogelijk, en korter, om de voor GNU beschikbare afkorting van \s te gebruiken:

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

Maar deze optie zal mislukken als het scheidingsteken zoiets is als een dubbele punt : of een ander leesteken (of een willekeurige letter).

Boundary

Of, we kunnen de overgang gebruiken van een cijfer naar een “geen cijfer” grens, nou ja, eigenlijk “een teken niet 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). 

Dit accepteert als geldige regels die beginnen met een 1 en gevolgd worden door een bepaald leesteken.

Opmerkingen

  • Het is onmogelijk dat de regels die door de gebruiker worden gepresenteerd: 1 TGCAG… alleen een 1 (dat wil zeggen: zonder genomische gegevens). Maar hoe dan ook, er kwam ook een haalbare oplossing bij.@St é phaneChazelas

Antwoord

Klinkt net als jij wil dit:

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

Voor het telgedeelte hiervan:

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

Answer

Elk van deze selecteert regels met een 1 in de eerste kolom

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

Deze kunnen beide worden uitgebreid, zodat je de wc niet eens nodig hebt om de regels te tellen

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

Antwoord

Met grep:

grep -c "^1\s" file 

Dit komt overeen met elke regel die begint met een 1 onmiddellijk gevolgd door witruimte en geeft een telling van die regels (waardoor wc -l)


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

Antwoord

Goede antwoorden hier, maar in de veronderstelling dat niet elke regel in een spatie eindigt (zoals als je gaat Als sommige daadwerkelijk uw “=”) halen, kunt u dit gebruiken:

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

Het komt in principe overeen met elke regel die begint met een, gevolgd door een niet-cijfer, inclusief witruimte. Iets meer uitgebreid, maar ook meer onfeilbaar. (Hoewel het vermeldenswaard is dat er hier niets is voor de null-voorwaarde van slechts-één-op-de-regel, is het niet “end-of-line” gevoelig.)

Opmerkingen

  • Merk op dat het regels niet toestaat die alleen bestaan uit 1. Als dat ' s niet gewenst, gebruik bijv. ^1($|[^0-9])

Answer

U kunt onderstaande regel ook gebruiken:

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

De parameter -F maakt van het veldscheidingsteken een witruimte . Als de waarde van het eerste veld “1” is, wordt de regel ervan afgedrukt.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *