Сравнение отрицательных значений в bash с использованием массивов

У меня есть интересная проблема, которую я пытаюсь решить, но я пока не могу этого сделать.

Предположим, что у меня есть 2 массива.

Массив:

1 -2 3 -2 2 -4 

Массив 2:

 -2 -3 4 5 2 -5 

Я хочу иметь возможность реально сравнить i-е значение как Array one и Array two :

  • Если оба отрицательные, я бы ввел в Array Three 0
  • Если они оба положительные, я добавлю 1
  • Если они противоположности, мне нужно вставить 2

Вывод:

 2 0 1 2 1 0 

Как я могу это сделать ?

2 Solutions collect form web for “Сравнение отрицательных значений в bash с использованием массивов”

Если вы знакомы с C, C ++ или Java, то вы найдете этот вариант bash 's for -loop довольно знакомым тоже. bash выполняет арифметическую оценку с помощью (( ... )) поэтому мы будем использовать это при сравнении значений:

 array1=( 1 -2 3 -2 2 -4 ) array2=( -2 -3 4 5 2 -5 ) array3=( ) for (( i=0; i < ${#array1[@]}; ++i )); do if (( array1[i] < 0 && array2[i] < 0 )); then array3[$i]=0 elif (( array1[i] > 0 && array2[i] > 0 )); then array3[$i]=1 else array3[$i]=2 fi done echo "${array3[@]}" 

Это также хорошо работает с оболочкой ksh93 , из которой bash получил множество своих функций.

Прямой путь:

 arr1=(1 -2 3 -2 2 -4) arr2=(-2 -3 4 5 2 -5) i=0 while [[ "$i" -lt "${#arr1[@]}" ]]; do a=$(( ${arr1[$i]} * ${arr2[$i]} )) if [[ "$a" -lt 0 ]]; then echo 2 else if [[ "${arr1[$i]}" -gt 0 ]]; then echo 1 else echo 0 fi fi : "$((i = i + 1))" done | paste -sd ' ' - 
  • Объединение нескольких команд в одну строку
  • Какова цель -i и -s вариантов bash?
  • Преобразование строки строки строки с датой в эпоху
  • Перезапустите процесс, когда я получу stderr из другого процесса
  • Почему встроенные новые строки в расширении команды заменены пробелами?
  • Сепаратор между списком команд и}
  • Прокрутка по выделенному файлу в сценарии bash
  • Почему локальная fn = $ (...) маскирует $? код состояния
  • использовать backquotes в скрипте
  • Правильный синтаксис для операторов `if ... elif`
  • Хотите извлечь часть имени файла до 5-го _?
  • Запустить тест, прочитанный в bash
  • Interesting Posts

    Squid: как заблокировать веб-сайт, но разрешить доступ к определенным папкам

    udev правила для PS / 2 и игровой порт не совпадают на attr, только env

    Почему временные метки на старых файлах установлены на моей недавно установленной системе?

    Обновлено с CentOS 6.4 -> 6.5, и теперь разрешения не работают должным образом?

    Mutt отправил файл в домашний каталог – как переместить

    Несколько значений масштаба окна TCP в зависимости от интерфейса?

    как передать переменную среды в sudo su

    Удалять файлы определенного расширения, кроме одного в Linux

    Разрешить пользователю доступ к домашнему каталогу другого пользователя

    Непонимание смысла команды df

    Разделитель в разбиении слов

    Есть ли способ, чтобы функция в моем сценарии bash автоматически запускалась при любой ошибке команды?

    Возможно ли создать псевдоним для rlogin и передать параметры входа?

    Получить путь к текущему скрипту при выполнении через символическую ссылку

    Как я могу подключать команды к любому терминалу?

    Linux и Unix - лучшая ОС в мире.