提问人:user2954167 提问时间:6/22/2018 更新时间:3/22/2023 访问量:9297
Linux 命令 wc -l 的 Windows 等效项是什么?
What is the windows equivalent of Linux command wc -l?
问:
我有一段代码,旨在将以下内容发送到 linux 命令行:
wc -l C:/inputdirectory/P*
但是,我需要在 Windows 中运行此脚本,并尝试找到等效的命令。我试过了
查找 /c /v C:/inputdirectory/P*
但这会引发一个错误,即 /v 不是有效的命令。你能告诉我为什么这不起作用吗?
*注意,命令本身并没有说“inputdirectory”,它有正确的目录,只是太乏味和私密而无法输入
答:
图片由 Eryk Sun 提供:
尝试搜索 ,即空字符串;仅使用反斜杠作为路径分隔符;如果路径中有空格,请引用该路径:""
find /c /v "" "C:\inputdirectory\P*"
评论
FIND /C /V
并不完全等同于 .它发出一串破折号,后跟文件名,然后是计数。 而,仅发出计数。wc -l
---------- README.TXT: 41
wc -l
如何计算一组文件中的行数?
使用以下批处理文件 (CountLines.cmd):
@echo off
Setlocal EnableDelayedExpansion
for /f "usebackq" %%a in (`dir /b %1`) do (
for /f "usebackq" %%b in (`type %%a ^| find "" /v /c`) do (
set /a lines += %%b
)
)
echo %lines%
endlocal
用法:
CountLines C:/inputdirectory/P*
延伸阅读
- Windows CMD 命令行的 AZ 索引 - 与 Windows cmd 行相关的所有内容的绝佳参考.
- dir - 显示文件和子文件夹的列表。
- find - 在文件中搜索文本字符串并显示找到它的所有行。
- for /f - 针对另一个命令的结果循环命令。
评论
type
find
find
for /f
wc -l C:/inputdirectory/P*
<count> <file>
find.exe
注意:如果您只需要单个输入文件的行数,则一个简单的解决方案(将整个文件加载到内存中)是,例如(gc file.txt)。Count
(gc
是 Get-Content
的内置别名)。
更快的版本:(gc -ReadCount 0 file.txt)。计数
从已过时的 cmd.exe
(命令提示符/批处理文件):
- 使用接受的答案。
在 PowerShell 中,有两个选项:From PowerShell, you have two options:
- 选项 A(次优):也使用公认的答案,稍作调整:
find --% /c /v "" "C:\inputdirectory\P*"
注意:停止分析符号指示 PowerShell 将后续参数按原样传递到目标程序(在展开 -style 环境变量引用(如 ,如果有)之后)。--%
cmd
%USERNAME%
在手头的情况下,这可以防止 PowerShell 进行解析,并且错误地忽略将其传递到外部目标程序 ()。""
find.exe
有关 PowerShell 在调用外部程序时处理引号的严重问题的摘要,请参阅此答案。
上述命令的输出 - 实际上,任何外部程序都只是文本,在这种情况下,它看起来像这样:find.exe
---------- PFILE1.TXT: 42
---------- PFILE2.TXT: 666
...
虽然这种输出对于人类观察者来说很容易掌握,但它使后续的编程处理变得繁琐,因为需要文本解析。
如下所述,使用 PowerShell 本机命令 (cmdlet) 提供了更大的灵活性,因为 PowerShell 命令通常发出具有类型化属性的对象,这极大地方便了后续处理。
- 选项 B(首选):将 PowerShell 自己的
Measure-Object
cmdlet 与-Line
开关配合使用:
注意:虽然此命令比解决方案更冗长,但由于输出具有类型化属性的对象,它最终提供了更大的灵活性,这极大地方便了后续处理;此外,PowerShell 复杂的输出格式系统提供了用户友好的默认表示形式。find
Get-Item -Path "C:\inputdirectory\P*" -PipelineVariable file | ForEach-Object {
Get-Content -LiteralPath $file |
Measure-Object -Line |
Select-Object @{ Name='File'; Expression={ $file } }, Lines
}
上面输出具有 .File
和 .Lines
属性,PowerShell 默认按如下方式打印:
File Lines
---- -----
C:\inputdirectory\Pfile1.txt 42
C:\inputdirectory\Pfile2.txt 666
...
除了更漂亮的输出呈现之外,输出的面向对象特性使得以编程方式处理结果变得容易。
例如,如果要将输出限制为行数大于或更大的文件,请通过管道传递到对上述命令的以下 Where-Object
调用:100
... | Where-Object Lines -ge 100
如果(另外)想要先按最高行数排序,请通过管道传递到 Sort-Object
cmdlet:
... | Sort-Object -Descending Lines
评论
cat file.txt | Measure-Object -line
Get-Content
cat
Measure-Object -Line
wc -l
(cat file.txt).Count
(ls | Measure-Object -line).Lines
(gci).Count
Measure-Object
gci
Get-ChildItem
ls
ls
/bin/ls
评论
""
find /c /v "" "C:\inputdirectory\P*"