将tcsh / sum字符串中的整数与整数相加

时间:2013-10-24 16:19:08

标签: scripting csh tcsh

我是shell和东西的新手,我遇到了一个问题。 我必须计算一起目录中文件的行数

用i计算$ i中每个文件的行长度:

find $i -maxdepth 1 -type f -exec wc -l {} \; | tr -s " " | cut -d " " -f 2

我是一个目录列表,上面的代码在foreach循环中 输出的数字是实际文件中有多少行,现在我只需要将它们相加

但我需要总结目录

中所有文件的长度

尝试将该行添加到某个变量中:

@ variable = (`find $i...`)

但它给了我错误的数字错误。

任何人都知道如何解决这个问题?我绝望了,试着整天都这样做,

1 个答案:

答案 0 :(得分:1)

首先,wc命令会为你计算行数,所以:

wc -l $i/* | tail -n 1

几乎可以做你想做的事;区别在于它不会消除普通文件以外的内容,也不会计算名称以.开头的“隐藏”文件。这样:

wc -l `find $i -maxdepth 1 -type f -print` /dev/null | tail -n 1

应该做你想做的事。 (/dev/null的添加是处理目录中没有文件的一种技巧。)输出将类似于

    210 total

(带前导空格);您可以使用awk

来捕获数字
wc -l `find $i -maxdepth 1 -type f -print` /dev/null | tail -n 1 | awk '{print $1}'

如果您想使用shell自行添加数字,请执行以下操作:

@ total = 0
foreach file ( `find $i -maxdepth 1 -type f` )
    @ total += `wc -l < $file`
end

但是对于非常大的目录,您可能会遇到命令行长度的限制。

最后,我觉得有义务告诉你csh和tcsh不是编程的好方法。他们的语法非常不规则。几十年来我一直在使用它们,我仍然需要通过反复试验来确定某个特定结构是否能够正常工作。我强烈建议您改为学习sh和/或bash。请参阅this article