汇总来自不同文件的行数

时间:2014-10-09 15:45:21

标签: bash shell sum increment cat

我需要总结来自不同文本文件的行数,例如:x_red,x_green,其中包含一些信息,这就是我得到的:

counter=0

colors=`cat manyColors.txt`

addPrefix(){
   echo "x_$1"
}


for color in colors
do
#   cat `addPrefix $color` | wc -l  # will give me the nº of lines just fine
   counter=$(($counter + cat `addPrefix $color` | wc -l ))
done 

所以,是的,计数器并没有正确递增,我没有想法如何恰当地总结这些论点,我在这里缺少什么?

编辑:另外,我该怎么转     " cat addPrefix $color | wc -l",变成一个变量?

Edit2:添加了功能并更改了功能名称,以解决误解。抱歉,我知道它仍然有点令人困惑

3 个答案:

答案 0 :(得分:0)

您可以在counter=循环内的BASH中使用此代码,而不是for行:

(( counter += $(wc -l < $(changeColor $color)) ))

此处无需使用cat

答案 1 :(得分:0)

当您使用$(...)语法时,您不需要使用$引用内部变量。

你应该可以简单地使用

    COUNTER=0
    for color in colors
    do
        COUNTER=$((COUNTER + $(cat $(changeColor $color) | wc -l`)))
    done

请确保将cat函数嵌入$(命令)中,因为您无法使用嵌套反引号。

答案 2 :(得分:0)

我发现你的问题难以理解,但如果你的标题显示,你想在多个文件中对行进行求和,你可以很容易地做到这一点:

文件1:

line 1
line 2
line 3

file2的:

line 1
line 2

cat file[12] | wc -l
5

诀窍不是将文件名传递给wc,而只是将所有文件作为单个流传递到stdin(使用cat)然后它无法计数,并给出每个文件的总计。比较一下:

wc -l file*
   3 file1
   2 file2
   5 total