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



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

937   6  

6 ответов:

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

line=$(head -n 1 filename)

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

read -r firstline<file

firstline будет вашей переменной (не нужно назначать другой)

line=$(head -1 file)

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

line=$(read -r FIRSTLINE < filename)

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

этого достаточно, и сохраняет первую строчку 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

вопрос не спрашивал, Что быстрее, но чтобы добавить к ответу 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

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

echo $(head -n 1 source.txt) > target.txt

Comments

    Ничего не найдено.