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

Ответы:

379

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

head -1 file

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

Карл Норум
источник
65
+1. вам нужна только голова, а не вся кошка: P (командный хвост тоже является частью игры в bash)
SparK
Читает headвесь файл и вырезает его, или он читает только 1 строку?
CMCDragonkai
@CMCDragonkai, думаю, вы могли бы проверить источник .
Карл Норум
2
Я предполагаю, что он читает только первые строки - он открывает файл в сотни мегабайт за миллисекунды.
Брайан Хаак
1
...понял! cat <(head file1) <(head file2), Источник
Джеймс Оуэрс
72

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

head -n 1 file.txt
Orbling
источник
41

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

sed -n 1p file
head -n 1 file
awk 'NR==1' file
JJJ
источник
21

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

Майк Пелли
источник
16

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

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

head -n 1 file.txt
mwcz
источник
9

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

 cat <file> | awk 'NR == 1'
josh.trow
источник
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]}

:)

jm666
источник
2

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

head -1 FileName.csv
Правеенкумар Секар
источник