【问题标题】:Printing the number of lines打印行数
【发布时间】:2017-04-28 18:56:14
【问题描述】:

我有一个只包含 .txt 文件的目录。我想打印每个文件的行数。当我写cat file.txt | wc -l 时,会出现行数,但是当我想编写脚本时,它会更复杂。我有这个代码:

for fis in `ls -R  $1`
do
        echo `cat $fis | wc -l`       

done

我试过: wc -l $fis ,用 awk,grep ,但它不起作用。它告诉我们:

cat: fis1: 没有这样的文件或目录 0

如何打印行数?

【问题讨论】:

  • 你可以只使用echo $( wc -l $fis )(替代反引号)但听起来你离开了猫,它抱怨

标签: linux bash


【解决方案1】:

要在子目录中递归查找文件,请使用find 命令,而不是主要用于人类阅读的ls -R

find "$1" -type f -exec wc -l {} +

循环ls -R 的输出的问题是:

  1. 带有空格的文件名将无法正确解析。
  2. 它只打印文件名之外的其他输出。

【讨论】:

    【解决方案2】:

    这里不是问题,但是 echo 命令是多余的: 你可以使用

    wc -l "${fis}"
    

    出了什么问题? 您有一个名为fis1 的子目录。查看ls的输出:

    # ls -R fis1
    fis1:
    file1_in_fis1.txt
    

    当你解析这个输出时,你的脚本会尝试

    echo `cat fis1: | wc -l` 
    

    cat 会告诉你No such file or directorywc 计数0

    正如@Barmar 解释的那样,ls 会打印您不想要的额外输出。

    不要尝试通过| grep .txtif [ -f "${fis}"]; then .. 修补您的尝试,这些将因filename with spaces.txt 而失败。所以请使用findshopt(并接受@Barmar 或@Cyrus 的回答)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多