Как сравнить количество запятых в аргументе bash с тем, что в текстовом файле - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть текстовый файл, содержащий:

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 голосов
/ 09 ноября 2018

Чтобы добавить к ответу от chepner , комбинация grep и wc также выполнит это:

commas () {
    head -1 "$1" |grep -o , |wc -l
}
0 голосов
/ 10 ноября 2018

Если вы хотите сравнить количество запятых, вы можете использовать

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

EDIT: Я думал $3 был другой файл. Когда это строка, вы можете использовать

if [ "$(tr -cd "," < "$1"/"$2")" = "$(tr -cd , <<< "$3")" ]; then
   echo yes
fi 
0 голосов
/ 09 ноября 2018

Удалить все , за исключением запятых, затем подсчитать количество символов.

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

Затем вы можете передать первую строку файла и ваш другой параметр в функцию:

IFS= read -r l < "$1/$2.txt"
if [[ $(commas "$l") -lt $(commas "$3") ]]; then
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...