Você pode se livrar do cut
e ler diretamente o nome do host e o endereço neste caso:
#!/bin/sh
while read -r machine ip
do
printf '%s : is my hostname & %s : is my @IP\n' "$machine" "$ip"
done < file
exit 0
Nota: não sei como inserir a tabulação no meu texto, substituí-lo por [tab]
Eu tenho um valor de nome de arquivo de lista separado por uma tabulação:
host1[tab]ip1
host2[tab]ip2
host3[tab]ip3
host4[tab]ip4
O delimitador padrão de cut
é [tab] e quando faço o seguinte:
cut -f1 < file
cut -f2 < file
Eu recebo meu host e meu IP conforme desejado. Mas isso não funciona no meu script
while read line
do
machine=$(echo $line | cut -f1)
ip=$(echo $line | cut -f2)
echo "$machine : is my hostname & $ip : is my @IP"
done < file
Na verdade, coloca toda a linha $line
na variável.
Eu também tentei isso sem mais sucesso:
machine=$(echo $line | cut -d$'\t' -f1)
ip=$(echo $line | cut -d$'\t' -f1)
Mas quando substituí a tabulação por espaço no arquivo e modifico meu código:
machine=$(echo $line | cut -d' ' -f1)
ip=$(echo $line | cut -d' ' -f1)
Funciona como esperado.
Gostaria de saber por que o primeiro resultado é diferente do esperado, pois funciona no CLI fora de um script.
Minha versão do Linux:
Linux yolo 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Agradecemos antecipadamente por ler e ajudar.