Wie lese ich die erste Zeile einer Datei mit cat?


198

Wie lese ich die erste Zeile einer Datei mit cat?

Antworten:


374

Du brauchst nicht cat.

head -1 file

wird gut funktionieren.


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

41

Es gibt viele verschiedene Möglichkeiten:

sed -n 1p file
head -n 1 file
awk 'NR==1' file

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.


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

9

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

 cat <file> | awk 'NR == 1'

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.


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]}

:) :)


2

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

head -1 FileName.csv
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.