Windows相当于“tail”命令

有没有办法在DOS下模拟* 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 

没有确切的等值。 但是,有一个本地DOS命令“more”,它有一个+ n选项,将在第n行之后开始输出文件:

DOS提示符:

 C:\>more +2 myfile.txt 

以上命令将输出前两行后的所有内容。
这实际上是Unix 头部的反转:

Unix控制台:

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

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

如果你有Windows PowerShell的安装(我认为它是从XP包括),你可以运行在DOS下:

头部命令:

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

尾巴指挥:

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

或者直接从电源shell:

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

更新

PowerShell 3.0(Windows 8和更高版本)添加了带有别名Last Tail命令。 TotalCount Head和别名也被添加。

所以,命令可以被重写为

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

more /e filename.txt P n
其中n =要显示的行数。 快速工作,就像head一样。

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

除此之外,它包含头部。

这是一个彻头彻尾的黑客,但如果它是一个巨大的文件,你只想检查格式,标题等,你正在寻找一个解决scheme,你总是可以重新定向“更多”输出到一个新的文件和CTRL-C很快。 输出行不能精确控制,你很可能会在输出行的中间杀死它,但这是一个很便宜的方法来抓取一小部分不可用的文件。

防爆。

 C:\ more test.csv> test.txt 
^ C C:\ more test.txt
第1行
2号线
等等...... C:\

当使用Matt已经提到的更多的+ n时,为了避免长文件中的暂停,试试这个:

更多+1 myfile.txt> con

当你从更多的redirect输出,它不会暂停 – 这里你redirect到控制台。 如果这是你想要的最终结果,你可以类似地redirect到这样的其他文件没有更多的暂停。 使用>redirect到文件并覆盖它,如果它已经存在,或者>>添加到现有的文件。 (可以用来redirect到con。)

那么,这将做到这一点,但它看起来像它看起来一样快(大约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”是文件的名称。

你也可以使用头部和尾部模拟的Git bash

Get-content -Tail n file.txt与powershell的Get-content -Tail n file.txt是唯一接近tail东西。

Get-Content *filename* | Select-Object -last *n* 上面提到的Get-Content *filename* | Select-Object -last *n*会加载/parsing整个事物。 不用说,它对我的​​10GB日志文件-Tail-Tail选项在文件结尾处开始。

如果你想使用head命令,一个简单的方法就是安装Cygwin。 那么你将拥有所有的UNIX工具。

如果这不是一个好的解决scheme,那么你可以尝试使用findstr,并search行尾指标。

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

FWIW,对于那些只需要从文件头中删除不确定数量的logging的人来说, 更多>运行良好。 这只是为了在开发一些东西的早期阶段有一个较小的文件。

我还没有尝试提取一个范围,但我能够使用下面的DOS命令获得一行:

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

由于大多数文件都包含空格,所以这个命令从所有的LOG文件中抽取每一行,并且基本上从1开始为每个文件编号。 编号结果然后输送到第二个FIND命令查找标记为数字6的行。

这里是一个快速的本地头命令,给你DOS中的前9行。

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

每行的前2个字符将是行号。

这个页面上有一个免费的head ,你可以使用。 我没有尝试过。

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

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

(从这个post复制: 窗口的尾巴命令 )

电源shell:

 Get-Content C:\logs\result.txt -Tail 10 Get-Content C:\logs\result.txt -wait (monitor the tail) 
 set /p line= < file.csv echo %line% 

它会返回你的文件的第一行在cmd Windows中variables%行%。

我不认为有什么方法可以解决问题。 在DOS中没有这样的命令,并且batch file远远不能被模拟(没有主要的痛苦)。

警告,由于像&,!,<等字符的特殊解释,对未知文本input使用batch file,令牌和定界能力可能是一场灾难。这种方法应该只保留为可预测的文本。