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


Odpowiedzi:


378

Nie trzeba cat.

head -1 file

będzie dobrze działać.


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


41

Istnieje wiele różnych sposobów:

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

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.


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

9

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

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

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.


jaka jest IFS=część na początku?
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]}

:)


2

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

head -1 FileName.csv
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.