O procedimento padrão (no Bash) é ler os diferentes descritores de arquivo com a opção -u
de read
:
while IFS= read -r -u3 l1 && IFS= read -r -u4 l2; do
printf '%s is good in %s\n' "$l1" "$l2"
done 3<file1 4<file2
Eu tenho dois arquivos com dois valores diferentes. Eu quero executar um comando em loop que precisa de entrada de ambos os arquivos. Deixe-me dar o exemplo para simplificar.
Conteúdo do arquivo1:
google
yahoo
Conteúdo do arquivo2:
mail
messenger
Eu preciso de um resultado como o abaixo
google is good in mail
yahoo is good in messenger
Como posso usar um loop for / while para conseguir o mesmo?
Eu preciso de um script para:
$ File1 precisa substituir o primeiro resultado em File1 e $ File2 precisa substituir o primeiro resultado em File2
/ usr / local / psa / bin / domain --criar domínio $ File1 -mail_service true -service-plan 'Domínio padrão' -ip 1.2.3.4 -login $ File2 -passwd "abcghth"
While loop
é possível, mas há uma maneira fácil
paste File{1,2} -d% | sed 's/%/ is good in /'
- %
pode ser qualquer símbolo
Mas se você insistir em loop, você pode usar os oferecidos por gniourf_gniourf ou simplesmente estourar sublinhado
mapfile -t A < File1
mapfile -t B < File2
if [ ${#A[*]} -lt ${#B[*]} ]
then
L=${#A[*]}
else
L=${#B[*]}
fi
n=-1
while [ $[++n] -lt $L ]
do
printf "%s is good in %s\n" "${A[$n]}" "${B[$n]}"
done