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.