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
Ответ 12
Существует набор ресурсов, который можно загрузить здесь: http://www.microsoft.com/downloads/en/confirmation.aspx?familyId=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displayLang=en
Он содержит инструмент tail.exe, но он совместим только с некоторыми версиями Windows
(Скопировано из этой записи: Команда хвоста для окон)
Ответ 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
Предупреждение, использование функции пакетного файла для токенов и делимитов при неизвестном вводе текста может быть катастрофой из-за специальной интерпретации символов, таких как &,!, <, и т.д. Такие методы должны быть зарезервированы только для прогнозируемых текст.