Windows平台上类似的“尾巴”命令

问题描述 投票:98回答:21

有没有一种方法来模拟Windows命令行上的* nix tail命令?我有一个文件,我想办法剪掉文本的第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
windows command-line
21个回答
84
投票

无完全等效。但是存在一个天然的DOS命令,有一个+ n选项,将开始输出第n行后的文件“多”:

DOS提示符:

C:\>more +2 myfile.txt

第一2行后上述命令将输出的一切。 这实际上是Unix的头的倒数:

UNIX控制台:

root@server:~$ head -2 myfile.txt

上述命令将只打印头两行的文件。


5
投票

Get-content -Tail n file.txt使用PowerShell是接近在Linux中tail的唯一的事情。

上述负载建议的Get-Content *filename* | Select-Object -last *n* /分析整个事情。不用说,这不是高兴我的10GB的日志文件...该-Tail选项并在文件末尾开始。


2
投票

如果你想在头命令,一个简单的方法来得到它是安装Cygwin。然后,你都在您的处置UNIX工具。

如果这不是一个很好的解决方案,那么你可以尝试使用FINDSTR并做结束行的指示进行搜索。

FINDSTR在MSDN:http://technet.microsoft.com/en-us/library/bb490907.aspx


2
投票

还有,可以从这里下载一个资源包:http://www.microsoft.com/downloads/en/confirmation.aspx?familyId=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displayLang=en

它包含一个tail.exe工具,但它仅与一些Windows版本兼容

(复制这个职位:Tail command for windows


1
投票

FWIW,对于那些只是需要从文件的头剪掉的记录的数目不确定,更多>效果很好。这是有用的只是为了有一个更小的文件在开发一些初期的工作。


1
投票

我还没有尝试提取范围,但我可以使用下面的DOS命令来获取行:

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

由于大多数文件包含空格,这个命令就会从所有日志文件和数字基本上他们每行从1开始的每个文件。然后,将编号结果管道输送到第二FIND命令,它查找标记为编号6的线。


1
投票

这里是一个快速的原生头命令,让你在DOS第9行。

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

在每一行的第一个2个字符将是行号。


1
投票

有一个关于head,你可以使用免费的this page工具。我还没有尝试过呢。


0
投票
set /p line= < file.csv 
echo %line%

它会回报你的文件的第一行CMD的Windows变量%线%。


0
投票

作为当代的答案,如果运行的是Windows 10,你可以使用“的Linux子系统的Windows”。

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

这将允许你从Windows中运行原生的Linux命令,从而准确地运行尾巴,你将如何在Linux。


0
投票

在PS尝试使用命令:

Select -Last 1

该命令还可以流水线。

例如获得第一行:

type .\out.txt | Select -Last 1

或者得到的第一行:

 type .\out.txt | Select -First 1

104
投票

如果你已经安装了Windows PowerShell(我觉得既然XP它包含),你可以从刚刚运行CMD.EXE:

head命令:

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

tail命令:

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命令。也增加了HeadFirst别名TotalCount

所以,命令可以被重新写为

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

-2
投票

我不认为有办法开箱。有一个在DOS和批处理文件没有这样的命令被远远地局限于模拟它(无大痛苦)。


-2
投票

未知文本输入警告,使用批处理文件,令牌和delims能力可以是一场灾难,由于字符像和特殊的解释,!,<,等等。这样的方法应该留给唯一可预见的文字。


24
投票
more /e filename.txt P n

其中n =显示的行数。工作快速,酷似head命令。


17
投票

你可以从CoreUtils,这是标准的UNIX工具的集合,移植到Windows获得GnuWin32

它,除其他外,包含头。


12
投票

这是一个总的黑客,但如果它是你想只检查格式,标题,等一个巨大的文件,你正在寻找一个解决方案,你可以永远只是“更多”输出重定向到一个新文件,CTRL-C很快。输出行不能被精确控制,你很可能会杀死它在一个线路输出的中间,但它抓住了,否则不可用文件的一个小一点的一种廉价的方式。

防爆。

C:\more test.csv > test.txt 
^C C:\more test.txt
line 1
line 2
etc...... C:\

7
投票

当使用更多+ N马特已经提到的,为了避免在长文件暂停,试试这个:

更+1的myfile.txt> CON

当您重定向从更多的输出,它不会暂停 - 在这里您重定向到控制台。您同样可以重定向至其他一些文件W / O的更多的停顿,如果这是你期望的最终结果。使用>重定向到文件并覆盖它,如果它已经存在,或>>追加到现有的文件。 (可以使用重定向到续)


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”是要打印的行数,而“文件名”是该文件的名称。


6
投票

电源外壳:

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

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

5
投票

你也可以使用Git bash其中头部和尾部被模仿,以及

© www.soinside.com 2019 - 2024. All rights reserved.