Sua substituição de comando é desnecessariamente complexa.
Em vez disso:
cells=$( awk '/rx cells/ { print $NF }' <"$co_result" )
printf 'Var_value: %s\n' "$cells"
$NF
será o último campo delimitado por espaço em branco na linha e será impresso se a linha contiver a string rx cells
.
Verifique também se o arquivo de entrada é um arquivo de texto Unix e não um arquivo de texto do DOS. Execute dos2unix
no arquivo para convertê-lo em um arquivo de texto Unix.
Olhando para o seu comando:
grep -e 'cells' $co_result | cut -d: -f2 | awk '{print $1}'| awk 'NR%2{printf $0"";next;}1'
Primeiro: grep -e 'cells' $co_result
falharia se $co_result
contivesse um espaço ou tabulação ou nova linha ou qualquer outro caractere especial (desde que não tenha sido citado).
O comando gera
tx cells : 468
rx cells : 1707
Então: cut -d: -f2
. Isso gera
468
1707
Então: awk '{print $1}'
. Isso gera o mesmo que acima, mas com os espaços iniciais removidos
Então: awk 'NR%2{printf $0"";next;}1'
. Esta é uma maneira ofuscada de fazer paste -d' ' - -
e saídas
468 1707
O echo
mais tarde será exibido
Var_value: 468 1707
O motivo pelo qual você não entende isso é que seu arquivo de entrada é um arquivo de texto do DOS e contém retornos de linha no final de cada linha. Portanto, o cursor volta para o início da linha depois de imprimir 468
.
Use dos2unix
no seu arquivo de entrada.
De onde você obtém 530
, não sei.