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 a1
(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.