Làm cách nào để đọc dòng đầu tiên của tệp bằng cat?


198

Làm cách nào để đọc dòng đầu tiên của tệp bằng cách sử dụng cat?

Câu trả lời:


374

Bạn không cần cat.

head -1 file

sẽ hoạt động tốt


65
+1. bạn chỉ cần cái đầu chứ không phải toàn bộ con mèo: P (đuôi lệnh cũng là một phần của trò chơi chữ bash)
SparK

headđọc toàn bộ tập tin và cắt nó, hoặc nó chỉ đọc 1 dòng?
CMCDragonkai

@CMCDragonkai, tôi đoán bạn có thể kiểm tra nguồn .
Carl Norum

2
Tôi đoán nó chỉ đọc những dòng đầu tiên - nó mở tệp hàng trăm megabyte trong một phần nghìn giây.
Brian Haak

1
...hiểu rồi! cat <(head file1) <(head file2). Nguồn
James Owers

72

Bạn không, sử dụng headthay thế.

head -n 1 file.txt

41

Có nhiều cách khác nhau:

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

21

Bạn có thể sử dụng cat file.txt | head -1, nhưng có lẽ tốt hơn là sử dụng đầu trực tiếp, như trong head -1 file.txt.


16

Điều này có thể không thể với cat. Có một lý do bạn phải sử dụng cat?

Nếu bạn chỉ cần làm điều đó với lệnh bash, thì nó sẽ hoạt động với bạn:

head -n 1 file.txt

9

catmột mình có thể không thể, nhưng nếu bạn không muốn sử dụng headtác phẩm này:

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

2
Tôi cho rằng thật ngớ ngẩn khi gọi 'một cách sử dụng con mèo vô dụng' trên một dòng được thiết kế đặc biệt để sử dụng cat, phải không.
jkerian

Phương pháp này rất tuyệt vì bạn có thể chọn bất kỳ dòng nào bạn muốn.
desgua

3
@desgua awkrất tuyệt, nhưng bạn không cần catở đây. awk 'NR == 2 {print $0}' <file>làm điều tương tự (Và nhiều hơn nữa, nếu bạn học được một chút awk.
Eric Wilson

5

Tôi ngạc nhiên rằng câu hỏi này đã tồn tại chừng nào nó còn chưa có ai cung cấp cách tiếp cận tích hợp sẵn cho mapfile.

IFS= read -r first_line <file

... Đặt dòng đầu tiên của tệp vào biến được mở rộng bằng "$first_line", dễ dàng như vậy.

Hơn nữa, vì readđược tích hợp vào bash và việc sử dụng này không đòi hỏi phải có lớp con, nó hiệu quả hơn đáng kể so với các cách tiếp cận liên quan đến các quy trình con như headhoặc awk.


là những gì IFS=một phần ngay từ đầu?
Florian Castellane

xấu của tôi, đây là một lời giải thích: unix.stackexchange.com/questions/184863/iêu
Florian Castellane

Đúng; trong trường hợp này, việc xóa IFSsẽ ngăn không cho khoảng trắng đầu và cuối bị xóa khỏi chuỗi được đọc.
Charles Duffy

3

Bạn không cần bất kỳ lệnh bên ngoài nào nếu bạn có bash v4 +

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

hoặc nếu bạn thực sự muốn cat

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

:)


2

Sử dụng lệnh dưới đây để lấy hàng đầu tiên từ tệp CSV hoặc bất kỳ định dạng tệp nào.

head -1 FileName.csv
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.