我试图仅使用 wc 获取文件中的单词数。wc -w file.txt
给我加上文件名。我不想要文件名。所以,我看到了它的wc -w < file.txt
工作原理。
我不明白这个命令是如何工作的。我什至无法在看到此命令的答案下方添加评论。
为什么在 的情况下不打印文件名wc -w < file.txt
?
wc -w
将输出每个参数的字数和文件名。所以命令wc -w myfile.txt
会给你类似的东西:
42 myfile.txt
但是, wherewc
不知道文件名,它只是输出计数。您可以通过使用输入重定向来隐藏文件名,因为wc
如果您没有明确命名文件,这些命令将读取标准输入。这可以通过以下方式完成:
wc -w <myfile.txt
或者:
cat myfile.txt | wc -w
尽管后者在这种情况下效率低下,并且在输入比某些文件的内容更复杂的情况下效果更好。
不知道文件名的原因是shell打开文件并将其附加到进程的标准输入。shell 也从不将传递给程序的命令行参数。许多程序都有这样的代码:wc
wc -w <myfile.txt
wc
<myfile.txt
wc
wc
FILE * infile;
if (argc == 0)
infile = stdin;
else
infile = fopen (argv[1]], "r");
选择标准输入或打开已知文件名。在前一种情况下,程序没有名称可用。
这是有效的,因为当您使用<
shell 时,会将“file.txt”的内容获取到wc
.
另外,请注意,这wc -l
将为您提供file.txt
. 如果你真的想要单词的数量而不管它们在哪一行,你应该wc -w
改用。
当您使用wc -w file.txt
它时,它会为您提供“file.txt”中的字数和文件名,因为wc
它接受许多文件作为可能的输入,因此它会在字数之后输出文件名,以便您知道该文件有那么多字。例如,假设您有这两个文件及其各自的内容:
双字.txt:foo bar
三字.txt:foo bar test
那么wc -w twoword.txt threeword.txt
会给你:
2 twoword.txt
3 threeword.txt
5 total
从而显示每个文件中有多少个单词,然后将它们加起来。
在您的示例中, file.txt 被发送到标准输入。在这里阅读什么 stdin、stout 和 stderr:对 stdin、stdout 和 stderr 感到困惑
手册页wc
定义了没有文件参数的行为。
wc
正在从标准输入读取内容file.txt
并打印字数。它不打印文件名,因为它在从标准输入读取时不知道文件名是什么。