如何比较bash参数中的逗号数与文本文件中的逗号数

时间:2018-11-09 19:38:55

标签: bash shell grep

我有一个文本文件,其中包含:

1,2,3

我有一个带参数的脚本插入,我想将该参数中的逗号数与文本文件中的数字进行比较。

我正在尝试做类似的事情:

if [ ((grep -c "," "$1/$2.txt")) -gt ((grep -c "," "$3")) ] | [ ((grep -c "," "$1/$2.txt")) -lt ((grep -c "," "$3")) ]; 
      then echo "yes"

$ 1 / $ 2.txt是文本文件的目录

我知道我做错了,但不知道如何获取逗号计数,因为-c返回行数。而且我不确定一半的语法。我应该改用sed吗?很高兴听到任何建议...

3 个答案:

答案 0 :(得分:0)

删除所有 逗号,然后计算字符数。

commas () {
    echo "$1" | tr -cd , | wc -m
}

然后您可以将文件的第一行和其他参数传递给函数:

IFS= read -r l < "$1/$2.txt"
if [[ $(commas "$l") -lt $(commas "$3") ]]; then

答案 1 :(得分:0)

要添加到 chepner 的答案中,grepwc的组合也可以做到这一点:

commas () {
    head -1 "$1" |grep -o , |wc -l
}

答案 2 :(得分:0)

当您只想比较逗号数时,可以使用

if [ "$(tr -cd "," < "$1"/"$2")" = "$(tr -cd , < "$3")" ]; then
   echo yes
fi 

编辑: 我以为$3是另一个文件。如果是字符串,则可以使用

if [ "$(tr -cd "," < "$1"/"$2")" = "$(tr -cd , <<< "$3")" ]; then
   echo yes
fi