Problema de "Desposicionamento" de informações ao usar comando "cut"

1. Problema de "Desposicionamento" de informações ao usar comando "cut"

Renata de Oliveira Pereira
rpoliveira_rop

(usa Outra)

Enviado em 05/05/2020 - 12:02h

Prezados(as),
Bom dia!

Sou iniciante com shell Scripts, e gostaria de compartilhar aqui alguns problemas que estou tendo para tentar entender o que esta acontecendo, ou o que posso estar fazendo de errado para fazer a correção.
Tenho um script *.bsh, onde após chamar uma execução de uma package no banco de dados Oracle, pego o retorno dessa execução, coloco em uma variável, e ai sim preciso aplicar alguns tratamentos para poder ter os resultados que preciso:

vresp é a variável onde eu recebo o retorno do Banco de dados, que é uma linha, uma string com dados que serão quebrados. A Letra incial de cada campo, é desprezada na hora do comando “cut”, mas estão ordenadas da seguinte forma:

vs_status => status – CHAR Tamanho(2) Ex.: “OK”
V=> obriga validade(S/N) – CHAR tamanho(1) Ex.”VN”
L=> obriga lote(S/N) – CHAR Tamanho(1) Ex.: “LN”
U=> unidade – CHAR Tamanho(15)=> Ex.: “CX C/4”
B=> informação barra – NUMBER Tamanho(22)  Ex.: “B17891039026839”
P=> descrição – CHAR Tamanho(40) => Ex.:”PDESENGRAX ORQUIMOL GL 5LT BR002683”
Q=> filote – NUMBER Tamanho(7) => Ex.: “Q16”
C=> qtd.caixas – NUMBER Tamanho(10) => Ex.: “C0”
N=> possui cx? – CHAR Tamanho(1) => Ex.: “NN”
T=> tipo caixa – NUMBER Tamanho(5) => Ex.: “T0”
A=> capacidade caixa – NUMBER Tamanho(20) => Ex.: “A0”

Esse retorno preciso jogar em outras variáveis conforme explico abaixo:

vresp="OKVNLSUCX C/4_________B17891039026839________PDESENGRAX ORQUIMOL GL 5LT BR002683____Q16_____C0_________NNT0____A0___________________"

O comando “cut” no script esta da seguinte forma:

vsta=`echo -e $vresp | cut -c1-2`
vval=`echo -e $vresp | cut -c4-4`
vlote=`echo -e $vresp | cut -c6-6`
vuni=`echo -e $vresp | cut -c8-22 | tr -d '_'`
vbarra=`echo -e $vresp | cut -c24-45 | tr -d '_'`
vprod1=`echo -e $vresp | cut -c47-66 | tr -d '_'`
vprod2=`echo -e $vresp | cut -c67-85 | tr -d '_'`
vqtcxbin=`echo -e $vresp | cut -c95-104 | tr -d '_'`
vcxbin=`echo -e $vresp | cut -c106-106 | tr -d '_'`
vtpcxbin=`echo -e $vresp | cut -c108-112 | tr -d '_'`
vcptpcxbin=`echo -e $vresp | cut -c114-300 | tr -d '_'`

RESULTADO PÓS COMANDO :
vsta = OK
vval = N
vlote = S
vuni = CX C/4
vbarra = 17891039026839
vprod1 = DESENGRAX ORQUIMOL G
vprod2 = L 5LT BR002683Q
vqtcxbin = N
vcxbin = T
vtpcxbin = A
vcptpcxbin =

Conforme podem ver acima ele “desposiciona” as informações.
Fiz um outro teste incluindo a informação do “filote”, e retirando os espaços da descrição, conforme abaixo:

vresp="OKVALBUCCCCCCCCCCCCCCCBDDDDDDDDDDDDDDDDDDDDDDPEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEQFFFFFFF___________CGGGGGGGGGGNHTIIIIIAJJJJJJJJJJJJJJJJJJJJ"

vval=`echo -e $vresp | cut -c4-4`
vlote=`echo -e $vresp | cut -c6-6`
vuni=`echo -e $vresp | cut -c8-22 | tr -d '_'`
vbarra=`echo -e $vresp | cut -c24-45 | tr -d '_'`
vprod1=`echo -e $vresp | cut -c47-66 | tr -d '_'`
vprod2=`echo -e $vresp | cut -c67-86 | tr -d '_'`
vfilote=`echo -e $vresp | cut -c88-94 | tr -d '_'`
venigma=`echo -e $vresp | cut -95-105`
vqtcxbin=`echo -e $vresp | cut -c107-116 | tr -d '_'`
vcxbin=`echo -e $vresp | cut -c118-118 | tr -d '_'`
vtpcxbin=`echo -e $vresp | cut -c120-124 | tr -d '_'`
vcptpcxbin=`echo -e $vresp | cut -c126-145 | tr -d '_'`

O resultado dá essa mensagem e os valores abaixo:
cut: invalid option -- '9'
Try 'cut --help' for more information.

Vsta = OK
Vval = A
Vlote = B
vuni = CCCCCCCCCCCCCCC
vbarra = DDDDDDDDDDDDDDDDDDDDDD
vprod1 = EEEEEEEEEEEEEEEEEEEE
vprod2 = EEEEEEEEEEEEEEEEEEEE
vfilote = FFFFFFF
venigma =
vqtcxbin = GGGGGGGGGG
vcxbin = H
vtpcxbin: = IIIII
vcptpcxbin: = JJJJJJJJJJJJJJJJJJJJ

Agora, se eu inverto a ordem da linha, ai dá certo, conforme abaixo:

vresp="OKVNLSUCX C/4_________B17891039026839________Q16_____C0_________NNT0____A0___________________PDESENGRAX ORQUIMOL GL 5LT BR002683____"


vval=`echo -e $vresp | cut -c4-4`
vlote=`echo -e $vresp | cut -c6-6`
vuni=`echo -e $vresp | cut -c8-22 | tr -d '_'`
vbarra=`echo -e $vresp | cut -c24-45 | tr -d '_'`
vfilote=`echo -e $vresp | cut -c47-53 | tr -d '_'`
vqtcxbin=`echo -e $vresp | cut -c55-64 | tr -d '_'`
vcxbin=`echo -e $vresp | cut -c66-66 | tr -d '_'`
vtpcxbin=`echo -e $vresp | cut -c68-72 | tr -d '_'`
vcptpcxbin=`echo -e $vresp | cut -c74-93 | tr -d '_'`
vprod1=`echo -e $vresp | cut -c95-115 | tr -d '_'`
vprod2=`echo -e $vresp | cut -c116-135 | tr -d '_'`

vval: N
vlote: S
vuni CX C/4
vbarra 17891039026839
vfilote 16
vqtcxbin 0
vcxbin N
vtpcxbin: 0
vcptpcxbin: 0
vprod1 DESENGRAX ORQUIMOL GL
vprod2 5LT BR002683

Alguém saberia me informar, porque do erro:
cut: invalid option -- '9'
Try 'cut --help' for more information.

E porque ao inverter a linha, ele já tem mais o problema de desposicionar as informações que vem depois da descrição?! Teria algum problema com espaços, ou caracteres especias?!

Obrigada.
Att,





  


2. Re: Problema de

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 06/05/2020 - 18:21h

rpoliveira_rop escreveu:

Prezados(as),
Bom dia!

Sou iniciante com shell Scripts, e gostaria de compartilhar aqui alguns problemas que estou tendo para tentar entender o que esta acontecendo, ou o que posso estar fazendo de errado para fazer a correção.
Tenho um script *.bsh, onde após chamar uma execução de uma package no banco de dados Oracle, pego o retorno dessa execução, coloco em uma variável, e ai sim preciso aplicar alguns tratamentos para poder ter os resultados que preciso:

vresp é a variável onde eu recebo o retorno do Banco de dados, que é uma linha, uma string com dados que serão quebrados.
A Letra inicial de cada campo, é desprezada na hora do comando “cut”, mas estão ordenadas da seguinte forma:

vs_status => status – CHAR Tamanho(2) Ex.: “OK”
V=> obriga validade(S/N) – CHAR tamanho(1) Ex.”VN”
L=> obriga lote(S/N) – CHAR Tamanho(1) Ex.: “LN”
U=> unidade – CHAR Tamanho(15)=> Ex.: “CX C/4”
B=> informação barra – NUMBER Tamanho(22)  Ex.: “B17891039026839”
P=> descrição – CHAR Tamanho(40) => Ex.:”PDESENGRAX ORQUIMOL GL 5LT BR002683”
Q=> filote – NUMBER Tamanho(7) => Ex.: “Q16”
C=> qtd.caixas – NUMBER Tamanho(10) => Ex.: “C0”
N=> possui cx? – CHAR Tamanho(1) => Ex.: “NN”
T=> tipo caixa – NUMBER Tamanho(5) => Ex.: “T0”
A=> capacidade caixa – NUMBER Tamanho(20) => Ex.: “A0”

Esse retorno preciso jogar em outras variáveis conforme explico abaixo:

vresp="OKVNLSUCX C/4_________B17891039026839________PDESENGRAX ORQUIMOL GL 5LT BR002683____Q16_____C0_________NNT0____A0___________________"

O comando “cut” no script esta da seguinte forma:

vsta=`echo -e $vresp | cut -c1-2`
vval=`echo -e $vresp | cut -c4-4`
vlote=`echo -e $vresp | cut -c6-6`
vuni=`echo -e $vresp | cut -c8-22 | tr -d '_'`
vbarra=`echo -e $vresp | cut -c24-45 | tr -d '_'`
vprod1=`echo -e $vresp | cut -c47-66 | tr -d '_'`
vprod2=`echo -e $vresp | cut -c67-85 | tr -d '_'`
vqtcxbin=`echo -e $vresp | cut -c95-104 | tr -d '_'`
vcxbin=`echo -e $vresp | cut -c106-106 | tr -d '_'`
vtpcxbin=`echo -e $vresp | cut -c108-112 | tr -d '_'`
vcptpcxbin=`echo -e $vresp | cut -c114-300 | tr -d '_'`

RESULTADO PÓS COMANDO :
vsta = OK
vval = N
vlote = S
vuni = CX C/4
vbarra = 17891039026839
vprod1 = DESENGRAX ORQUIMOL G
vprod2 = L 5LT BR002683Q
vqtcxbin = N
vcxbin = T
vtpcxbin = A
vcptpcxbin =

Conforme podem ver acima ele “desposiciona” as informações.
Fiz um outro teste incluindo a informação do “filote”, e retirando os espaços da descrição, conforme abaixo:

vresp="OKVALBUCCCCCCCCCCCCCCCBDDDDDDDDDDDDDDDDDDDDDDPEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEQFFFFFFF___________CGGGGGGGGGGNHTIIIIIAJJJJJJJJJJJJJJJJJJJJ"

vval=`echo -e $vresp | cut -c4-4`
vlote=`echo -e $vresp | cut -c6-6`
vuni=`echo -e $vresp | cut -c8-22 | tr -d '_'`
vbarra=`echo -e $vresp | cut -c24-45 | tr -d '_'`
vprod1=`echo -e $vresp | cut -c47-66 | tr -d '_'`
vprod2=`echo -e $vresp | cut -c67-86 | tr -d '_'`
vfilote=`echo -e $vresp | cut -c88-94 | tr -d '_'`
venigma=`echo -e $vresp | cut -95-105`
vqtcxbin=`echo -e $vresp | cut -c107-116 | tr -d '_'`
vcxbin=`echo -e $vresp | cut -c118-118 | tr -d '_'`
vtpcxbin=`echo -e $vresp | cut -c120-124 | tr -d '_'`
vcptpcxbin=`echo -e $vresp | cut -c126-145 | tr -d '_'`

O resultado dá essa mensagem e os valores abaixo:
cut: invalid option -- '9'
Try 'cut --help' for more information.

Vsta = OK
Vval = A
Vlote = B
vuni = CCCCCCCCCCCCCCC
vbarra = DDDDDDDDDDDDDDDDDDDDDD
vprod1 = EEEEEEEEEEEEEEEEEEEE
vprod2 = EEEEEEEEEEEEEEEEEEEE
vfilote = FFFFFFF
venigma =
vqtcxbin = GGGGGGGGGG
vcxbin = H
vtpcxbin: = IIIII
vcptpcxbin: = JJJJJJJJJJJJJJJJJJJJ

Agora, se eu inverto a ordem da linha, ai dá certo, conforme abaixo:

vresp="OKVNLSUCX C/4_________B17891039026839________Q16_____C0_________NNT0____A0___________________PDESENGRAX ORQUIMOL GL 5LT BR002683____"


vval=`echo -e $vresp | cut -c4-4`
vlote=`echo -e $vresp | cut -c6-6`
vuni=`echo -e $vresp | cut -c8-22 | tr -d '_'`
vbarra=`echo -e $vresp | cut -c24-45 | tr -d '_'`
vfilote=`echo -e $vresp | cut -c47-53 | tr -d '_'`
vqtcxbin=`echo -e $vresp | cut -c55-64 | tr -d '_'`
vcxbin=`echo -e $vresp | cut -c66-66 | tr -d '_'`
vtpcxbin=`echo -e $vresp | cut -c68-72 | tr -d '_'`
vcptpcxbin=`echo -e $vresp | cut -c74-93 | tr -d '_'`
vprod1=`echo -e $vresp | cut -c95-115 | tr -d '_'`
vprod2=`echo -e $vresp | cut -c116-135 | tr -d '_'`

vval: N
vlote: S
vuni CX C/4
vbarra 17891039026839
vfilote 16
vqtcxbin 0
vcxbin N
vtpcxbin: 0
vcptpcxbin: 0
vprod1 DESENGRAX ORQUIMOL GL
vprod2 5LT BR002683

Alguém saberia me informar, porque do erro:
cut: invalid option -- '9'
Try 'cut --help' for more information.

E porque ao inverter a linha, ele já tem mais o problema de desposicionar as informações que vem depois da descrição?! Teria algum problema com espaços, ou caracteres especias?!

Obrigada.
Att,

Boa noite, rpoliveira_rop.
Quanto ao "erro",
cut: invalid option -- '9',
Faltou - "-c", na atribuição da variável:
venigma=`echo -e $vresp | cut -95-105`
Para uma melhor análise, é interessante que disponibilize a "variável" vresp, no "formato" ORIGINAL,
Para isso, coloque a mesma como código, selecione o texto e pressione Alt+c.
Obs.: Se utiliza o "bash", é mais prático usar a "Expansão de Variáveis"
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts