我需要总结来自不同文本文件的行数,例如: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:添加了功能并更改了功能名称,以解决误解。抱歉,我知道它仍然有点令人困惑
答案 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