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,令牌和定界能力可能是一场灾难。这种方法应该只保留为可预测的文本。