Recorriendo pares de valores en bash [duplicado]
Tengo 10 archivos de texto y quiero paste
cada archivo con su par, de modo que tenga 5 archivos en total.
Intenté lo siguiente:
for i in 4_1 5_1 6_1 7_1 8_1
do
for j in 4_2 5_2 6_2 7_2 8_2
do
paste ${i}.txt ${j}.txt > ${i}.${j}.txt
done
done
Sin embargo, este código combina todas las combinaciones posibles en lugar de simplemente combinar los pares coincidentes.
Entonces me gustaría que el archivo 4_1.txt
se empareje con 4_2.txt
, 5_1.txt
con 5_2.txt
, etc.
Estoy de acuerdo con la respuesta propuesta actualmente por fedorqui en el contexto de la pregunta formulada actualmente. Lo siguiente se proporciona sólo para proporcionar algunas respuestas más generales.
Un enfoque más general (para bash 4.0 o posterior) es almacenar sus pares en una matriz asociativa:
declare -A pairs=( [4_1]=4_2 [5_1]=5_2 [6_1]=6_2 [7_1]=7_2 [8_1]=8_2 )
for i in "${!pairs[@]}"; do
j=${pairs[$i]}
paste "$i.txt" "$j.txt" >"${i}.${j}.txt"
done
Otra (compatible con versiones anteriores de bash) es utilizar más de una matriz convencional:
is=( 4_1 5_1 6_1 7_1 8_1 )
js=( 4_2 5_2 6_2 7_2 8_2 )
for idx in "${!is[@]}"; do
i=${is[$idx]}
j=${js[$idx]}
paste "$i.txt" "$j.txt" >"$i.$j.txt"
done
Lo más simple hasta ahora:
for i in "1 a" "2 b" "3 c"; do a=( $i ); echo "${a[1]}"; echo "${a[0]}"; done
a
1
b
2
c
3