Jak odczytać pierwszą linię pliku za pomocą cat?

201

Jak czytać pierwszą linię pliku przy użyciu cat?

Doboy
źródło

Odpowiedzi:

378

Nie trzeba cat.

head -1 file

będzie dobrze działać.

Carl Norum
źródło
65
+1. potrzebujesz tylko głowy, a nie całego kota: P (ogon dowodzenia jest również częścią bash pun)
SparK
Czy headczyta cały plik i wycina go, czy czyta tylko 1 linię?
CMCDragonkai
@CMCDragonkai, myślę, że możesz sprawdzić źródło .
Carl Norum
2
Myślę, że czyta tylko pierwsze wiersze - otwiera plik setek megabajtów w milisekundach.
Brian Haak,
1
...Rozumiem! cat <(head file1) <(head file2). Źródło
James Owers
72

Nie, użyj headzamiast tego.

head -n 1 file.txt
Orbling
źródło
41

Istnieje wiele różnych sposobów:

sed -n 1p file
head -n 1 file
awk 'NR==1' file
JJJ
źródło
21

Możesz użyć cat file.txt | head -1, ale prawdopodobnie lepiej byłoby użyć bezpośrednio głowy, jak w head -1 file.txt.

Mike Pelley
źródło
16

Może to nie być możliwe w przypadku cat. Czy jest powód, dla którego musisz skorzystać cat?

Jeśli po prostu musisz to zrobić za pomocą polecenia bash, powinno to działać dla Ciebie:

head -n 1 file.txt
mwcz
źródło
9

catsamo może nie być możliwe, ale jeśli nie chcesz korzystać z headtego działa:

 cat <file> | awk 'NR == 1'
josh.trow
źródło
2
Przypuszczam, że głupotą jest wzywać „bezużyteczne użycie kota” na linii specjalnie zaprojektowanej cat, prawda?
jkerian
Ta metoda jest świetna, ponieważ możesz wybrać dowolną linię.
desgua
3
@desgua awkjest świetna, ale cattutaj nie potrzebujesz . awk 'NR == 2 {print $0}' <file>robi to samo. (I wiele więcej, jeśli się trochę nauczysz awk.
Eric Wilson,
5

Dziwię się, że pytanie to istniało tak długo, jak było, i nikt nie podał jeszcze wbudowanego podejścia do mapowania.

IFS= read -r first_line <file

... umieszcza pierwszy wiersz pliku w zmiennej rozwiniętej o "$first_line", to takie proste.

Co więcej, ponieważ readjest wbudowany w bash i takie użycie nie wymaga podpowłoki, jest znacznie wydajniejsze niż podejścia z udziałem podprocesów takich jak headlub awk.

Charles Duffy
źródło
jaka jest IFS=część na początku?
Florian Castellane
moje złe, oto wyjaśnienie: unix.stackexchange.com/questions/184863/...
Florian Castellane
Dobrze; w takim przypadku czyszczenie IFSzapobiega usuwaniu wiodących i końcowych białych znaków z czytanego ciągu.
Charles Duffy
3

Nie potrzebujesz żadnych zewnętrznych poleceń, jeśli masz bash v4 +

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

lub jeśli naprawdę chcesz cat

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

:)

jm666
źródło
2

Użyj poniższego polecenia, aby uzyskać pierwszy wiersz z pliku CSV lub dowolnego formatu pliku.

head -1 FileName.csv
Praveenkumar Sekar
źródło