O comando Recortar não separa por guia no script

2

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.

    
por Uhciar 15.10.2015 / 10:46

1 resposta

2

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
    
por 15.10.2015 / 11:03