it-swarm.com.de

Wie kann ich das erste Word jeder Zeile in meiner Datei mit den Linux-Befehlen anzeigen?

Ich habe eine Datei, die viele Zeilen enthält, und ich möchte nur das erste Word jeder Zeile mit den Linux-Befehlen anzeigen.

Wie kann ich das machen?

20
MOHAMED

Versuchen Sie dies mit grep :

grep -Eo '^[^ ]+' file
33
Gilles Quenot

Sie können awk verwenden:

awk '{print $1}' your_file

Dadurch wird die erste Spalte ($1) in your_file "gedruckt".

32
newfurniturey

versuchen Sie dies mit coreutils cut:

cut -d' ' -f1 file
7
Gilles Quenot

Ich sehe da schon Antworten. Sie können dies aber auch mit sed tun:

sed 's/ .*//' fileName
3
Memento Mori

Die oben genannten Lösungen scheinen in Ihren speziellen Fall zu passen. Beachten Sie für eine allgemeinere Anwendung Ihrer Frage, dass Wörter im Allgemeinen so definiert sind, dass sie durch Leerzeichen getrennt werden, jedoch nicht unbedingt Leerzeichen. Spalten in Ihrer Datei können beispielsweise tabulatorgetrennt sein oder sogar durch eine Mischung aus Tabulatoren und Leerzeichen getrennt sein.

Die vorherigen Beispiele sind alle nützlich, um durch Leerzeichen getrennte Wörter zu finden, während nur das awk-Beispiel auch Wörter findet, die durch andere Leerzeichen getrennt sind (und tatsächlich stellt sich heraus, dass dies in verschiedenen sed/grep-Versionen ziemlich schwierig ist). Sie können auch leere Zeilen explizit überspringen, indem Sie die awk-Anweisung folgendermaßen ändern:

awk '{if ($1 !="") print $1}' your_file

Wenn Sie auch besorgt sind über die Möglichkeit von leeren Feldern , d. H. Zeilen, die mit Leerzeichen beginnen , dann ist eine robustere Lösung in Ordnung. Ich bin mit awk nicht geschickt genug, um einen Einzeiler für solche Fälle zu erstellen, aber ein kurzes Python-Skript, das den Trick macht, könnte wie folgt aussehen:

>>> import re
>>> for line in open('your_file'):
...     words = re.split(r'\s', line)
...     if words and words[0]:
...         print words[0]
1
Jeffrey Froman

... oder unter Windows (falls Sie GnuWin32 grep haben):

grep -Eo "^[^ ]+" file
0
user3038458