Как получить первую строку файла в bash-скрипте? - PullRequest
203 голосов
/ 13 марта 2010

Я должен поместить в переменную bash первую строку файла. Я предполагаю, что это с командой grep, но есть ли способ ограничить количество строк?

Ответы [ 6 ]

339 голосов
/ 13 марта 2010

head берет первые строки из файла, а параметр -n может использоваться для указания количества извлекаемых строк:

line=$(head -n 1 filename)
48 голосов
/ 14 марта 2010

чтобы прочитать первую строку, используя bash, используйте оператор read. например,

read -r firstline<file

firstline будет вашей переменной (нет необходимости присваивать другой)

10 голосов
/ 18 ноября 2015

Этого достаточно и сохраняет первую строку filename в переменной $line:

read -r line < filename

Мне также нравится awk для этого:

awk 'NR==1 {print; exit}' file

Чтобы сохранить саму строку, используйте синтаксис var=$(command). В этом случае line=$(awk 'NR==1 {print; exit}' file).

Или даже sed:

sed -n '1p' file

С эквивалентом line=$(sed -n '1p' file).


См. Пример, когда мы вводим read с seq 10, то есть последовательность чисел от 1 до 10:

$ read -r line < <(seq 10) 
$ echo "$line"
1

$ line=$(awk 'NR==1 {print; exit}' <(seq 10))
$ echo "$line"
1
10 голосов
/ 13 марта 2010
line=$(head -1 file)

Будет работать нормально. (Как и предыдущий ответ). Но

line=$(read -r FIRSTLINE < filename)

будет немного быстрее, поскольку read - встроенная команда bash.

4 голосов
/ 04 ноября 2016

Просто echo первый список вашего исходного файла в целевой файл.

echo $(head -n 1 source.txt) > target.txt
4 голосов
/ 15 апреля 2016

Вопрос не задан, который является самым быстрым, но, чтобы добавить к ответу sed, -n '1p' плохо работает, так как пространство шаблона все еще сканируется в больших файлах. Из любопытства я обнаружил, что «голова» узко выигрывает у седа:

# best:
head -n1 $bigfile >/dev/null

# a bit slower than head (I saw about 10% difference):
sed '1q' $bigfile >/dev/null

# VERY slow:
sed -n '1p' $bigfile >/dev/null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...