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