Scripting 将tcsh中的整数求和/将字符串求和为整数

Scripting 将tcsh中的整数求和/将字符串求和为整数,scripting,csh,tcsh,Scripting,Csh,Tcsh,我对shell和其他东西还不熟悉,我遇到了一个问题。 我必须计算一个目录中有多少行包含这些文件 通过这个,我计算$i中每个文件的行长度: find $i -maxdepth 1 -type f -exec wc -l {} \; | tr -s " " | cut -d " " -f 2 i是目录列表,上面的代码在foreach循环中 这个数字的输出是实际文件有多少行,现在我只需要求和 但是我需要对目录中所有文件的长度求和 试图将该行添加到某个变量: @ variable = (`find $

我对shell和其他东西还不熟悉,我遇到了一个问题。 我必须计算一个目录中有多少行包含这些文件

通过这个,我计算$i中每个文件的行长度:

find $i -maxdepth 1 -type f -exec wc -l {} \; | tr -s " " | cut -d " " -f 2
i是目录列表,上面的代码在foreach循环中 这个数字的输出是实际文件有多少行,现在我只需要求和

但是我需要对目录中所有文件的长度求和

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

@ variable = (`find $i...`)
但它给了我错误的数字格式


有人知道如何解决这个问题吗?我很绝望,一整天都在尝试,首先,
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
@total=0
foreach文件(`find$i-maxdepth 1-typef`)
@总计+=`wc-l<$file`
结束
虽然对于非常大的目录,您可能会遇到命令行长度的限制


最后,我觉得有义务让您知道csh和tcsh不是用于编程的好shell。它们的语法非常不规则。我已经使用它们几十年了,但我仍然需要反复试验,以确定某个特定的构造是否能够工作。我强烈建议学习
sh
和/或
bash
。看到了。

谢谢,最后一个对我来说是最好的解决方案,几乎一整天都在想怎么做,第一个很有趣,第二个和第三个都不起作用,它们似乎永远不会停止循环。我刚开始使用unix和shell脚本,在我们大学我们是两个组,使用bash的有经验的人和unix的新手,我们使用tcsh@Ricsie:新来者正在学习tcsh脚本编写?这真是个糟糕的主意。是的,我们可以选择bash(2),但是有bash的课程进行得更快,跳过了基础知识,所以我们通常选择所有的tcsh,但是在课程结束后,我想获得更多关于bash的经验,再次非常感谢,你在我的项目中帮了我很多忙:-)@Ricsie:很高兴我能提供帮助。我认为根本不应该有一门讲授csh或tcsh脚本的课程。