Unix - 计算两个文件内的行并对值求和

Unix - Count line inside two files and sum the value

我想计算 2 个文件中有多少行。我创建函数来获取每个文件的值,并将其求和。 这是代码:

count_sus_pop()
{
wc -l < ${SCRIPTDIR}/output/${OUTPUTFILE1}_${DATE}.csv
}

count_waive_pop()
{
wc -l < ${SCRIPTDIR}/output/${OUTPUTFILE2}_${DATE}.csv
}

if [$(count_sus_pop)+$(count_waive_pop) -gt 2];
then
pop="[POPULATION]"
else
pop=""
fi

如果求和结果大于2,将“[POPULATION]”赋值给变量pop,否则pop为空。 我的代码不起作用。请给我你的建议

您的脚本中存在一些基本的语法错误 - 我建议使用 ShellCheck 来修复这些错误。

在计算合并行数方面,我建议采用这种方法:

total_lines=$(cat "${SCRIPTDIR}/output/${OUTPUTFILE1}_${DATE}.csv" "${SCRIPTDIR}/output/${OUTPUTFILE2}_${DATE}.csv" | wc -l)

即用cat合并两个文件,用wc -l求总行数

您的测试将是 if [ "$total_lines" -gt 2 ] - 请注意空格很重要。

我的建议是只使用:

total_lines=$(cat "${SCRIPTDIR}/output/${OUTPUTFILE1}_${DATE}.csv" "${SCRIPTDIR}/output/${OUTPUTFILE2}_${DATE}.csv" | wc -l)
if [[ $total_lines -gt 2 ]]; then
    pop="[POPULATION]"
else
    pop=""
fi

[] 两边需要空格。而test运算符不进行算术运算,所以需要使用shell算术运算符$(( ))

if [ $(( $(count_sus_pop)+$(count_waive_pop) )) -gt 2 ]

或者您可以使用 bash 的内置 `[[ ]]`` 运算符:

if [[ $(count_sus_pop)+$(count_waive_pop) -gt 2 ]];