Преобразование строки в массив в bash с позиционными значениями - PullRequest
1 голос
/ 03 октября 2011

Я пытался просмотреть много похожих вопросов, но у меня есть конкретный запрос.У меня есть два или более наборов строк (значения, разделенные пробелом).Я хочу перебрать

firstString="f1 f2 f3 f4"
secondString="s1 s2 s3 s4"

Я хочу что-то вроде

f1-s1
f2-s2
f3-s3
f4-s4

(в одном цикле)

Я должен иметь возможность принять позиционное значениевторой и последующие массивы в одном цикле.

Ответы [ 4 ]

2 голосов
/ 04 октября 2011

Ну, если вы сначала замените все пробелы новой строкой, используя tr, чтобы каждое значение было в отдельной строке, то paste решит вашу проблему:

$ cat a b
f1
f2
f3
f4
s1
s2
s3
s4

$ paste -d- a b
f1-s1
f2-s2
f3-s3
f4-s4

Чистый раствор для решения проблем:

#!/bin/bash

firstString='f1 f2 f3 f4'
secondString='s1 s2 s3 s4'

read -ra FIRST <<< "$firstString"
read -ra SECOND <<< "$secondString"

index=0
for i in ${FIRST[@]}
do
    echo $i-${SECOND[$index]}
    ((index++))
done
1 голос
/ 04 октября 2011

Вы можете использовать встроенные массивы bash:

first=(f1 f2 f3 f4)
second=(s1 s2 s3 s4)
for (( i = 0; i < ${#first[*]}; i++ )); do
    echo ${first[$i]}-${second[$i]}
done
0 голосов
/ 04 октября 2011

Вы можете легко сделать это портативным способом:

set $firstString
for s in $secondString; do
  echo "$1-$s"
  shift
done
0 голосов
/ 04 октября 2011

см. Тест с awk ниже:

kent$  firstStr="f1 f2 f3 f4"
kent$  secondStr="s1 s2 s3 s4"

#now we have two variable


kent$  echo 1|awk -v two=$secondStr -v one=$firstStr '{split(one,a);split(two,b);for(i=1;i<=length(a);i++)print a[i]"-"b[i]}' 
f1-s1
f2-s2
f3-s3
f4-s4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...