Если оператор с 2 массивами для выполнения относительной сходящейся задачи - PullRequest
0 голосов
/ 09 января 2019

Для простоты данные вымышлены.

Вот проблема Содержание обработанных данных

cat rawdata

10 0-9{3}
4  0-9{3}
7  0-9{3}

noc = $ (cat ipConn.txt | awk '{print $ 1}') rct = $ (cat ipConn.txt | awk '{print $ 2}')

Предполагаемое решение:

для меня в $ {noc []} если $ i -ge 50, то coomand -options $ {rct []} сделано

Код понятен? но элемент в $ {noc []} должен совпадать с элементом в $ {rct []} так что затрагиваются только элементы в одной строке ..

1 Ответ

0 голосов
/ 09 января 2019

Попробуйте цикл while read:

echo '10 0-9{3}
4  0-9{3}
7  0-9{3}' |
while IFS=' ' read -r num item; do
    if (( num >= 50 )); then
       some_action with "$item"
    fi
done

Обратите внимание, что в bash цикл обычно очень медленный. Более быстрое решение состоит в том, чтобы сначала отфильтровать строки с первым столбцом, большим или равным 50, затем удалить первый столбец и затем выполнить some_action, используя xargs (или даже передать -P0 в xargs для параллельной работы):

echo '10 0-9{3}
4  0-9{3}
7  0-9{3}' |
awk '$1 >= 50' |
cut -d' ' -f2- |
xargs -n1 some_action with
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...