Windows эквивалент команды "хвост"

Есть ли способ имитировать команду * nix tail в командной строке Windows? У меня есть файл, и я хочу, чтобы отключить первые n строк текста. Например:

D:\>type file.txt
line one
line two
line three
D:\>*[call to tail]* > result.txt

D:\>type result.txt
line two
line three

Ответ 1

Нет точного эквивалента. Однако существует встроенная команда DOS "больше", которая имеет параметр + n, который начнет выводить файл после n-й строки:

Запрос DOS:

C:\>more +2 myfile.txt

Вышеуказанная команда выведет все после первых двух строк.
На самом деле это инверсия главы Unix:

Консоль Unix:

[email protected]:~$ head -2 myfile.txt

Вышеуказанная команда будет печатать только первые 2 строки файла.

Ответ 2

Если у вас установлен Windows PowerShell (я думаю, что он включен с XP), вы можете просто запустить из cmd.exe:

Начальная команда:

powershell -command "& {Get-Content *filename* -TotalCount *n*}"

Команда хвоста:

powershell -command "& {Get-Content *filename* | Select-Object -last *n*}"

или, прямо из PowerShell:

Get-Content *filename* -TotalCount *n*
Get-Content *filename* | Select-Object -last *n*


Обновить

PowerShell 3.0 (Windows 8 и выше) добавлена команда Tail с псевдонимом Last. Head и First псевдонимы к TotalCount были также добавлены.

Таким образом, команды могут быть переписаны как

Get-Content *filename* -Head *n*
Get-Content *filename* -Tail *n*

Ответ 3

more /e filename.txt P n

где n = количество строк для отображения. Работает быстро и точно соответствует команде head.

Ответ 4

Вы можете получить CoreUtils из GnuWin32, который представляет собой набор стандартных инструментов unix, портированных в Windows.

Он, между прочим, содержит голову.

Ответ 5

Это общий взлом, но если это огромный файл, который вы хотите просто изучить в формате, заголовке и т.д., и вы ищете решение, вы всегда можете просто перенаправить вывод "больше" в новый файл и CTRL-C быстро. Строки вывода нельзя точно контролировать, и вы, скорее всего, убьете их в середине строки вывода, но это дешевый способ захватить небольшой бит в противном случае непригодного для использования файла.

Пример.

<Предварительно > C:\test.csv > test.txt
^ C C:\more test.txt
строка 1
строка 2
и т.д....... C: \

Ответ 6

При использовании более + n, о котором уже упоминал Мэтт, чтобы избежать пауз в длинных файлах, попробуйте следующее:

больше +1 myfile.txt > con

Когда вы перенаправляете вывод из большего количества, он не приостанавливается - и здесь вы перенаправляетесь на консоль. Вы также можете перенаправить на другой файл, например, без пауз больше, если это ваш желаемый конечный результат. Используйте > , чтобы перенаправить файл и перезаписать его, если он уже существует, или → добавить в существующий файл. (Может использовать либо для перенаправления на con.)

Ответ 7

Ну, это будет сделано, но это примерно так же быстро, как и выглядит (примерно O (n * m), где n - количество отображаемых строк, а m - общее количество строк в файле):

for /l %l in (1,1,10) do @for /f "tokens=1,2* delims=:" %a in ('findstr /n /r "^" filename ^| findstr /r "^%l:"') do @echo %b

Где "10" - количество строк, которые вы хотите распечатать, а "filename" - это имя файла.

Ответ 8

вы также можете использовать Git bash, где также эмулируются голова и хвост

Ответ 9

Get-content -Tail n file.txt с powershell - единственное, что приближается к tail в linux.

Предлагаемый выше Get-Content *filename* | Select-Object -last *n* загружает/разбирает все это. Излишне говорить, что он не был доволен моим файлом журнала 10 ГБ... Параметр -Tail начинается с конца файла.

Ответ 10

Powershell:

Get-Content C:\logs\result.txt -Tail 10

Get-Content C:\logs\result.txt -wait (monitor the tail)

Ответ 11

Если вам нужна команда head, один простой способ получить ее - установить Cygwin. Тогда у вас будут все инструменты UNIX.

Если это нехорошее решение, вы можете попробовать использовать findstr и выполнить поиск индикатора конца строки.

findstr на MSDN: http://technet.microsoft.com/en-us/library/bb490907.aspx

Ответ 13

На этой странице есть бесплатная утилита для head которую вы можете использовать. Я еще не пробовал.

Ответ 14

Я не пытался извлечь диапазон, но мне удалось получить строку, используя следующую команду DOS:

find /N " " *.log|find "[6]" 

Так как большинство файлов содержат пробелы, эта команда извлекает каждую строку из всех файлов LOG и в основном числивает их начиная с 1 для каждого файла. Затем пронумерованные результаты передаются во вторую команду FIND, которая ищет строку, помеченную как номер 6.

Ответ 15

FWIW, для тех, кому просто нужно отключить неопределенное количество записей из заголовка файла, больше > работает хорошо. Это полезно только для того, чтобы иметь меньший файл для работы на ранних стадиях разработки чего-то.

Ответ 16

Вот быстрая команда head, которая дает вам первые 9 строк в DOS.

findstr /n "." myfile.txt | findstr "^.:"

Первые 2 символа в каждой строке будут номером строки.

Ответ 17

set /p line= < file.csv 
echo %line%

он вернет первую строку вашего файла в cmd Windows в переменной% line%.

Ответ 18

В качестве современного ответа, если вы используете Windows 10, вы можете использовать "Подсистему Linux для Windows".

https://docs.microsoft.com/en-us/windows/wsl/install-win10

Это позволит вам запускать встроенные команды linux изнутри windows и, таким образом, запускать tail точно так же, как в linux.

Ответ 19

в PS попробуй использовать команду:

Select -Last 1

Эта команда также может быть передана по конвейеру.

Пример для получения первой строки:

type .\out.txt | Select -Last 1

или получить первую строку:

 type .\out.txt | Select -First 1

Ответ 20

Я не думаю, что есть выход из коробки. В DOS нет такой команды, и командные файлы могут ограничить ее симуляцию (без большой боли).

Ответ 21

Предупреждение, использование функции пакетного файла для токенов и делимитов при неизвестном вводе текста может быть катастрофой из-за специальной интерпретации символов, таких как &,!, <, и т.д. Такие методы должны быть зарезервированы только для прогнозируемых текст.