Вывести файл, пропустив первые X строк в Bash
У меня есть очень большой файл, и я хочу вывести его на экран, пропустив первые 1,000,000 строк. Я посмотрел в документацию по команде cat
, но не нашел в ней опции для этого. Ищу команду или простую программу на Bash, которая могла бы решить эту задачу. Как это можно сделать?
5 ответ(ов)
Самый простой способ удалить первые десять строк из файла, который я нашел:
$ sed 1,10d file.txt
В общем случае, где X
— это количество удаляемых строк с начала файла, благодарю комментаторов и редактировщиков за помощь:
$ sed 1,Xd file.txt
Если у вас установлена утилита GNU tail
, вы можете сделать следующее:
tail -n +1000001 huge-file.log
Знак +
в этом примере делает именно то, что вам нужно. Как указано в руководстве (man page):
Если первый символ K (количество байт или строк) — это
+
, печать начинается с K-го элемента с начала каждого файла.
Таким образом, как упомянуто в комментарии, использование +1000001
начнет вывод с первой строки после первых 1,000,000 строк.
Если вы хотите пропустить первые две строки файла, вы можете использовать следующую команду:
tail -n +3 <имя_файла>
Если вам нужно пропустить первые x строк, можете использовать такую команду:
tail -n +$((x+1)) <имя_файла>
Здесь <имя_файла>
замените на название вашего файла.
Вот менее многословная версия с использованием AWK:
awk 'NR > 1000000' myfile.txt
Тем не менее, я бы рекомендовал использовать целые числа для большей ясности.
Команда для удаления первой строки и вывода оставшихся строк выглядит следующим образом:
sed -n '1d;p'
В этой команде 1d
указывает sed
удалить первую строку, а -n
подавляет автоматический вывод. После этого p
(печатать) выводит все строки, кроме удаленной. Таким образом, вы получите весь текст, за исключением первой строки.
Как изменить цвет вывода echo в Linux
Как перенаправить вывод в файл и на экран (stdout)
Как запросить ввод Yes/No/Cancel в скрипте оболочки Linux?
Как работает "cat << EOF" в bash?
Как использовать 'grep' для непрерывного потока?