【问题标题】:List files in directory, store output in file then count lines in output列出目录中的文件,将输出存储在文件中,然后计算输出中的行数
【发布时间】:2015-02-22 03:47:54
【问题描述】:

我是 unix 的初学者,被分配了以下任务:

列出您的主目录的内容,将此输出存储在名为 newHomelist 的文件中,然后计算此输出的行数。

首先我检查了我的结果应该是什么:

ls ~/ | wc -l

我由此得到结果“20”。

然后我尝试了以下方法:

ls ~/ > newHomelist | wc -l

但是,这给了我“0”的结果。我想我理解它为什么这样做,因为我已经移动了文件中的所有行,因此它没有计算任何东西。我想我需要进入文件然后计算行数。像这样的:

 ls ~/ > newHomelist | more newHomelist | wc -l

但是我得到的结果是“23”。这不是我所期待的结果。谁能告诉我哪里出错了?

谢谢

【问题讨论】:

  • 任务是否说明您需要使用单个命令执行此操作?使用分号(或换行符)分隔的多个命令怎么样?顺便说一句,more 是交互式的,并且添加了更多行,因此行数增加了。
  • 它没有,尽管它属于一个名为“重定向和管道”的部分,我认为应该使用一个命令来完成。根据您的建议,我尝试了以下方法: ls ~/ > newHomelist ;更多新家列表 | wc -l 这给了我正确的“20”输出,所以我对这个结果很满意,谢谢。我现在将阅读您所说的“更多是互动的”是什么意思。
  • 如果程序需要用户输入(并且通常打印输出作为响应),则该程序称为 interactivemore 是一个允许浏览大文件的寻呼机。如果有更多要显示的内容,它会在屏幕底部打印一个名为--More-- 的提示,因此它的名字。试试more sometextfile 看看。然后在--More-- 提示符下键入h 寻求帮助。那是用户输入more 会做出反应。

标签: unix


【解决方案1】:

如果您需要在单行中执行此操作,您可以使用 tee 拆分输出 (stdout)(请参阅“man tee”)

$ ls ~/ | tee newHomelist | wc -l

使用> 将标准输出重定向到文件意味着它不适用于管道中的后续命令。

你也可以用多个命令来做

$ ls ~/ > newHomeList
$ wc -l newHomeList
  # or the two commands combined onto one line as
$ ls ~/ > newHomeList ; wc -l newHomeList

【讨论】:

  • 谢谢。这对我有帮助。我现在明白'tee'的作用了。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
相关资源
最近更新 更多