Wie lese ich die erste Zeile einer Datei mit cat?

198

Wie lese ich die erste Zeile einer Datei mit cat?

Doboy
quelle

Antworten:

374

Du brauchst nicht cat.

head -1 file

wird gut funktionieren.

Carl Norum
quelle
65
+1. Sie brauchen nur den Kopf, nicht die ganze Katze: P (der Befehlsschwanz ist auch Teil des Bash-Wortspiels)
SparK
Liest headdie gesamte Datei und schneidet sie aus oder liest sie nur die 1 Zeile?
CMCDragonkai
@CMCDragonkai, ich denke du könntest die Quelle überprüfen .
Carl Norum
2
Ich denke, es liest nur die ersten Zeilen - es öffnet eine Hundert-Megabyte-Datei in Millisekunden.
Brian Haak
1
...Ich habs! cat <(head file1) <(head file2). Quelle
James Owers
72

Verwenden Sie headstattdessen nicht.

head -n 1 file.txt
Orbling
quelle
41

Es gibt viele verschiedene Möglichkeiten:

sed -n 1p file
head -n 1 file
awk 'NR==1' file
JJJ
quelle
21

Sie könnten verwenden cat file.txt | head -1, aber es wäre wahrscheinlich besser, den Kopf direkt zu verwenden, wie in head -1 file.txt.

Mike Pelley
quelle
16

Dies ist mit möglicherweise nicht möglich cat. Gibt es einen Grund, den Sie verwenden müssen cat?

Wenn Sie es einfach mit einem Bash-Befehl tun müssen, sollte dies für Sie funktionieren:

head -n 1 file.txt
mwcz
quelle
9

catallein ist möglicherweise nicht möglich, aber wenn Sie dies nicht verwenden möchten, headfunktioniert dies:

 cat <file> | awk 'NR == 1'
josh.trow
quelle
2
Ich nehme an, es ist albern, eine "nutzlose Verwendung von Katze" in einer Linie zu nennen, die speziell für die Verwendung entwickelt wurde cat, nicht wahr?
Jkerian
Diese Methode ist großartig, da Sie jede gewünschte Linie auswählen können.
Desgua
3
@desgua awkist toll, aber du brauchst es cathier nicht. awk 'NR == 2 {print $0}' <file>macht das gleiche. (Und vieles mehr, wenn Sie ein wenig lernen awk.
Eric Wilson
5

Ich bin überrascht, dass es diese Frage schon so lange gibt und noch niemand den in Pre-Mapfile integrierten Ansatz bereitgestellt hat.

IFS= read -r first_line <file

... fügt die erste Zeile der Datei in die um so "$first_line"einfach erweiterte Variable ein .

Da readdiese Funktion in bash integriert ist und für diese Verwendung keine Unterschale erforderlich ist, ist sie außerdem wesentlich effizienter als Ansätze mit Unterprozessen wie headoder awk.

Charles Duffy
quelle
Was ist der IFS=Teil am Anfang?
Florian Castellane
Mein schlechtes, hier ist eine Erklärung: unix.stackexchange.com/questions/184863/…
Florian Castellane
Richtig; In diesem Fall IFSverhindert das Löschen, dass führende und nachfolgende Leerzeichen aus der gelesenen Zeichenfolge entfernt werden.
Charles Duffy
3

Sie benötigen keinen externen Befehl, wenn Sie bash v4 + haben

< file.txt mapfile -n1 && echo ${MAPFILE[0]}

oder wenn du wirklich willst cat

cat file.txt | mapfile -n1 && echo ${MAPFILE[0]}

:) :)

jm666
quelle
2

Verwenden Sie den folgenden Befehl, um die erste Zeile aus einer CSV-Datei oder einem beliebigen Dateiformat abzurufen.

head -1 FileName.csv
Praveenkumar Sekar
quelle