Diese Frage hat hier bereits Antworten :

Kommentare

  • Von der Anhand Ihres Beispiels hier könnten Sie an unserer Schwesterseite Bioinformatik interessiert sein.
  • Ich habe mich beim Zurückziehen geirrt Meine eigene enge Abstimmung, da die Antworten auf die verknüpfte Frage, die mich am meisten überzeugen, diejenigen sind, die die Möglichkeit von - vorwegnehmen, und die aktuellen Antworten erfordern entweder PCRE (was nicht erforderlich ist) hier) oder nehmen Sie das ASCII-Leerzeichen als Trennzeichen und nicht als Tabulatorzeichen an.

Antwort

Mit awk:

Kommentare

  • Nette Geste mit der Summe!
  • Plus kann awk '{print $1}' <inputfile|sort -n|uniq -c zeigt eine Zusammenfassung der Häufigkeit der Tag-Zählungen an.
  • Es ist nicht erforderlich, inputfile mit <, aber ja.

Antwort

Die Frage im Körper

Wählen Sie Zeilen aus, die mit einem 1 beginnen, gefolgt von einem Leerzeichen

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

, das auch die Anzahl angibt Anzahl der Zeilen (ohne dass der Aufruf von wc erforderlich ist)

Die Frage im Titel

A 1 nicht gefolgt von einer anderen Zahl (oder nichts):

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

Aber beide oben genannten Lösungen haben Lesen Sie einige interessante Themen weiter.


Im Hauptteil der Frage behauptet der Benutzer, dass die Datei „tabulatorgetrennt“ ist.

Trennzeichen

tab

Eine Zeile, die mit wi beginnt th a 1 gefolgt von einer Registerkarte (eine tatsächliche Registerkarte im Befehl). Dies schlägt fehl, wenn das Trennzeichen ein Leerzeichen (oder ein anderes oder keines) ist:

grep "^1 " file 

Leerzeichen

Eine Zeile, die mit einem 1 gefolgt von einem Leerzeichen (einem tatsächlichen Leerzeichen im Befehl). Dies schlägt fehl, wenn das Trennzeichen ein anderes oder keines ist:

grep "^1 " file 

Registerkarte oder Leerzeichen

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

Leerzeichen

Eine flexiblere Option besteht darin, mehrere Leerzeichen (horizontal und vertikal) einzuschließen. Der Zeichensatzsatz [:space:] besteht aus (Leerzeichen), \t (horizontale Registerkarte) ), \r (Wagenrücklauf), \n (Zeilenumbruch), \v (vertikale Registerkarte) ) und \f (Formular-Feed). Grep kann jedoch nicht mit einer neuen Zeile übereinstimmen (dies ist eine interne Einschränkung, die nur mit der Option -z vermieden werden kann). Es ist möglich, es als Beschreibung für das Trennzeichen zu verwenden. Es ist auch möglich und kürzer, die verfügbare GNU-Kurzform von \s zu verwenden:

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

Aber diese Option schlägt fehl, wenn das Trennzeichen so etwas wie ein Doppelpunkt : oder ein anderes Interpunktionszeichen (oder ein beliebiger Buchstabe) ist.

Grenze

Oder Wir können den Übergang von einer Ziffer zu einer Grenze „keine Ziffer“ verwenden, also tatsächlich „ein Zeichen, das nicht in [_[:alnum:]] (_a-zA-Z0-9 enthalten ist ) „:

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). 

Dies akzeptiert als gültige Zeilen, die mit einer 1 beginnen und auf die ein Interpunktionszeichen folgt.

Kommentare

  • Es gibt keine Möglichkeit, dass die vom Benutzer präsentierten Zeilen: 1 TGCAG… nur a 1 (dh ohne genomische Daten). Aber es wurde auch eine praktikable Lösung hinzugefügt.@St é phaneChazelas

Antwort

Klingt wie Sie Ich möchte Folgendes:

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

Für den Zählteil davon:

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

Antwort

In beiden Fällen werden Zeilen mit einem 1 in der ersten Spalte

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

Diese beiden können erweitert werden, sodass Sie nicht einmal die wc benötigen, um die Zeilen zu zählen

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

Antwort

Verwenden von grep:

grep -c "^1\s" file 

Dies entspricht jeder Zeile, die mit einer 1 unmittelbar gefolgt von einem Leerzeichen beginnt, und gibt eine Anzahl dieser Zeilen an (wodurch die Notwendigkeit von wc -l)


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

Antwort

Gute Antworten hier, aber vorausgesetzt dass nicht jede Zeile in einem Leerzeichen endet (als ob Sie gehen würden Bei einigen, die es tatsächlich zu Ihrem „=“ schaffen, können Sie Folgendes verwenden:

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

Es passt grundsätzlich zu jeder Zeile, die mit einer beginnt, gefolgt von eine nichtstellige Zahl, einschließlich Leerzeichen. Etwas ausführlicher, aber auch narrensicherer. (Obwohl es erwähnenswert ist, dass es hier nichts für die Nullbedingung von nur einem in der Leitung gibt, ist es nicht empfindlich für das Zeilenende.)

Kommentare

  • Beachten Sie, dass Zeilen, die nur aus 1 bestehen, nicht zulässig sind. Wenn dies ist nicht erwünscht, verwenden Sie zB ^1($|[^0-9])

Antwort

Sie können auch die folgende Zeile verwenden:

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

Der Parameter -F macht das Feldtrennzeichen zu einem Leerzeichen Wenn der Wert des ersten Feldes „1“ ist, wird seine Zeile gedruckt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.