Распечатать файл, пропустив первые X строк в Bash

Решение re вообще не использует индекс. Вы должны использовать команды, такие как:

db.collectionname.find({'files':{'$regex':'^File'}})

(я не могу комментировать ниже их ответов, поэтому я отвечаю здесь)

468
задан codeforester 11 December 2017 в 23:36
поделиться

5 ответов

Вам будет нужен хвост. Некоторые примеры:

$ tail great-big-file.log
< Last 10 lines of great-big-file.log >

, Если действительно необходимо ПРОПУСТИТЬ конкретное количество "первых" строк, используйте

$ tail -n +<N+1> <filename>
< filename, excluding first N lines. >

таким образом, если Вы хотите пропустить строки N, Вы начинаете печатать строку N+1. Пример:

$ tail -n +11 /tmp/myfile
< /tmp/myfile, starting at line 11, or skipping the first 10 lines. >

, Если Вы хотите просто видеть последнее столько строк, опустите "+":

$ tail -n <N> <filename>
< last N lines of file. >
781
ответ дан rogerdpack 12 December 2017 в 09:36
поделиться
  • 1
    Я просто добавил разъяснение в вопросе, но у меня должно быть переполнение: автоматический, так как реальный пример будет иметь вещи кроме моего ' drop-down' меню. Кроме того, я полагаю, что тег Div может быть сам закрытие. В любом случае, это doesn' t, кажется, имеют значение, добавляю ли я закрывающий тэг или самозакрываю его. – pkaeding 24 February 2009 в 18:38

Можно сделать это использование команд головы и хвоста:

head -n <num> | tail -n <lines to print>

, где цифра 1e6 + количество строк, Вы хотите распечатать.

6
ответ дан Dana the Sane 12 December 2017 в 09:36
поделиться

Если Вы имеете хвост GNU в наличии в своей системе, можно сделать следующее:

tail -n +1000001 huge-file.log

Это + символ, который делает то, что Вы хотите. Заключить в кавычки из страницы справочника:

, Если первый символ K (число байтов или строк) '+', печать, начинающаяся с объекта Kth от запуска каждого файла.

Таким образом, как отмечено в комментарии, помещая +1000001 начинает печатать с первым объектом после первых 1 000 000 строк.

92
ответ дан MERose 12 December 2017 в 09:36
поделиться

Этот сценарий оболочки хорошо работает для меня:

#!/bin/bash
awk -v initial_line=$1 -v end_line=$2 '{
    if (NR >= initial_line && NR <= end_line) 
    print $0
}' $3

Используемый с этим файлом примера (file.txt):

one
two
three
four
five
six

Команда (это извлечет от второго до четвертой строки в файле):

edu@debian5:~$./script.sh 2 4 file.txt

Вывод этой команды:

two
three
four

Конечно, можно улучшить его, например, путем тестирования, что все значения аргументов являются ожидаемым :-)

10
ответ дан 22 November 2019 в 22:38
поделиться

Мне нужно было сделать то же самое, и я нашел эту ветку.

Я попробовал "tail -n +, но он просто напечатал все.

Строки more + хорошо работали в приглашении". , но оказалось, что он ведет себя совершенно иначе при запуске в режиме без головы (cronjob).

В конце концов, я написал это сам:

skip=5
FILE="/tmp/filetoprint"
tail -n$((`cat "${FILE}" | wc -l` - skip)) "${FILE}"
-2
ответ дан 22 November 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: