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

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


person Doboy    schedule 24.05.2011    source источник


Ответы (11)


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

head -1 file

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

person Carl Norum    schedule 24.05.2011
comment
+1. вам нужна только голова, а не весь кот: P (командный хвост тоже является частью каламбура) - person SparK; 17.02.2014
comment
head читает весь файл и вырезает его или читает только 1 строку? - person CMCDragonkai; 01.05.2015
comment
@CMCDragonkai, я думаю, вы могли бы проверить источник. - person Carl Norum; 01.05.2015
comment
Я предполагаю, что он читает только первые строки - он открывает файл размером в сотни мегабайт за миллисекунды. - person Brian Cannard; 14.09.2015
comment
А если бы вы копировали несколько файлов? например Я хочу достичь cat file1 file2 | head, не читая все file1 и file2? - person James Owers; 28.10.2015
comment
Я не уверен, что это специфично для Mac, но команда head -n 1 file. Существует аргумент -n для передачи количества строк. - person Gustavo Straube; 25.08.2016

Вы этого не сделаете, используйте вместо этого head.

head -n 1 file.txt
person Orbling    schedule 24.05.2011

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

sed -n 1p file
head -n 1 file
awk 'NR==1' file
person JJJ    schedule 06.07.2012
comment
И когда мы должны использовать какой? - person Xanlantos; 11.06.2021

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

person Mike Pelley    schedule 24.05.2011

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

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

head -n 1 file.txt
person mwcz    schedule 24.05.2011

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

 cat <file> | awk 'NR == 1'
person josh.trow    schedule 24.05.2011
comment
Я полагаю, что глупо говорить о «бесполезном использовании кота» в строке, специально предназначенной для использования cat, не так ли. - person jkerian; 24.05.2011
comment
Этот метод великолепен, потому что вы можете выбрать любую строку, которую хотите. - person desgua; 28.11.2013
comment
@desgua awk великолепен, но cat здесь не нужен. awk 'NR == 2 {print $0}' <file> делает то же самое. (И многое другое, если вы немного подучитесь awk. - person Eric Wilson; 25.06.2015

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

IFS= read -r first_line <file

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

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

person Charles Duffy    schedule 17.02.2014
comment
что за часть IFS= в начале? - person Florian Castellane; 24.05.2018
comment
плохо, вот объяснение: unix.stackexchange.com/questions/184863/ - person Florian Castellane; 24.05.2018
comment
Правильно; в этом случае очистка IFS предотвращает удаление начальных и конечных пробелов из прочитанной строки. - person Charles Duffy; 24.05.2018

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

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

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

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

:)

person jm666    schedule 24.05.2011

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

head -1 FileName.csv
person Praveenkumar Sekar    schedule 26.07.2018

На этот вопрос есть много хороших ответов. Просто закину еще один в корзину, если хочешь сделать это с lolcat

lolcat FileName.csv | head -n 1
person Norfeldt    schedule 24.09.2020

Добавление еще одной неприятной альтернативы в список:

perl -pe'$.<=1||last' file
# or 
perl -pe'$.<=1||last' < file
# or
cat file | perl -pe'$.<=1||last'
person ardnew    schedule 03.11.2020