打印行数

时间:2017-04-28 18:56:14

标签: linux bash

我有一个只包含.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

如何打印行数?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

这里不是问题,但是echo命令不仅仅是需要的: 你可以使用

wc -l "${fis}"

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

的输出
# ls -R fis1
fis1:
file1_in_fis1.txt

解析此输出时,您的脚本将尝试

echo `cat fis1: | wc -l` 

cat会告诉您No such file or directorywc0

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

请勿尝试按| grep .txtif [ -f "${fis}"]; then ..修补您的尝试,这些操作会因filename with spaces.txt而失败。因此,请使用findshopt(并接受@Barmar或@Cyrus的答案)。