Как мне прочитать первую строку файла, используя cat?


202

Как мне прочитать первую строку файла, используя cat?

Ответы:


379

Вам не нужно cat.

head -1 file

будет работать нормально


65
+1. вам нужна только голова, а не вся кошка: P (командный хвост тоже является частью игры в bash)
SparK

Читает headвесь файл и вырезает его, или он читает только 1 строку?
CMCDragonkai

@CMCDragonkai, думаю, вы могли бы проверить источник .
Карл Норум

2
Я предполагаю, что он читает только первые строки - он открывает файл в сотни мегабайт за миллисекунды.
Брайан Хаак

1
...понял! cat <(head file1) <(head file2), Источник
Джеймс Оуэрс


41

Есть много разных способов:

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

21

Вы можете использовать cat file.txt | head -1, но было бы лучше использовать голову напрямую, как в head -1 file.txt.


16

Это может быть невозможно с cat. Есть ли причина, которую вы должны использовать cat?

Если вам просто нужно сделать это с помощью команды bash, это должно работать для вас:

head -n 1 file.txt

9

catсамо по себе может быть невозможно, но если вы не хотите использовать headэто работает:

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

2
Я полагаю, глупо называть «бесполезное использование кошки» на линии, специально предназначенной для этого cat, не так ли.
jkerian

Этот метод хорош, потому что вы можете выбрать любую нужную вам строку.
Desgua

3
@desgua awkэто здорово, но тебе catздесь не нужно . awk 'NR == 2 {print $0}' <file>делает то же самое. (И многое другое, если вы узнаете немного awk.
Эрик Уилсон

5

Я удивлен тем, что этот вопрос существует уже давно, и никто еще не предоставил встроенный подход к pre-mapfile.

IFS= read -r first_line <file

... помещает первую строку файла в переменную, развернутую "$first_line", просто так.

Более того, поскольку readон встроен в bash и такое использование не требует подоболочек, он значительно более эффективен, чем подходы, включающие такие подпроцессы, как headили awk.


какая IFS=роль в начале?
Флориан Кастеллан

мой плохой, вот объяснение: unix.stackexchange.com/questions/184863/…
Флориан Кастеллан

Правильно; в этом случае очистка IFSпредотвращает удаление начальных и конечных пробелов из прочитанной строки.
Чарльз Даффи

3

Вам не нужна никакая внешняя команда, если у вас есть bash v4 +

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

или если вы действительно хотите cat

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

:)


2

Используйте приведенную ниже команду, чтобы получить первую строку из файла CSV или любых форматов файлов.

head -1 FileName.csv
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.