如何计算指定行数的单词?

Chr*_*ris 3 bash shell-script

我遇到了一个有趣的问题来计算文件中的单词,其中行数也被指定为命令行参数。例如,如果输入文本文件有 -

Unix is an OS
Linux is the child of Unix
Unix is fun.
End of File
Run Code Online (Sandbox Code Playgroud)

要执行的命令是:

bash test.sh unix.txt 3
Run Code Online (Sandbox Code Playgroud)

其中unix.txt是包含句子的测试文件,3 是要计算单词的行数。答案是 13。

我已经使用了基本wc命令,但没有一个会给出正确的答案。

所以,我尝试使用 for 循环,但我无法指定如何只使用这些行数。

小智 10

随着head -n 3 unix.txt你的前三行的文件,然后你可以管他们wc

因此,对于存储在$fileshell 变量中的任意文件名:

{ head -n 3 | wc -w; } < "$file"
Run Code Online (Sandbox Code Playgroud)

或者:

head -n 3 -- "$file" | wc -w
Run Code Online (Sandbox Code Playgroud)

尽管后者不适用于-使用某些head实现调用的文件,并且当文件无法打开时0除了错误消息(by head)之外还输出,并且在这种情况下失败退出状态将丢失,除非您使用(非标准)pipefail选项在某些 shell 中找到。