AWK - como validar arquivo com mais de um delimitador

1. AWK - como validar arquivo com mais de um delimitador

Alexandre Rodrigues Bernardes
Bernardes02

(usa Linux Mint)

Enviado em 18/06/2018 - 22:05h

Boa Noite Pessoal,

Me deparei com uma dúvida na questão de validação de arquivos com mais de um tipo de delimitador.

Exemplo:

Tenho um arquivo com 6 colunas e com o seguinte layout:

AAAA;asad;asdasdasd;asdasdad;asdasdasdasd;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwerwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXCV
AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123A@231231|23123|123123;ERTEYRTYE

Neste caso gostaria de saber como posso realizar uma validação na coluna 6 porem esta coluna possui dois padrões de delimitadores que são informações divididas por tres pipes onde uma "@" é o delimitador. O X da questão é como valida uma coluna onde tem um campo que tem outros campos dentro ?

Tipo como faço para realizar uma validação nesta 6 coluna, sendo que nela o padrão de delimitadores é outro.

Se puderem dar uma help.

Valeu Pessoal


  


2. Re: AWK - como validar arquivo com mais de um delimitador

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 18/06/2018 - 23:07h

Bernardes02 escreveu:

Boa Noite Pessoal,

Me deparei com uma dúvida na questão de validação de arquivos com mais de um tipo de delimitador.

Exemplo:

Tenho um arquivo com 6 colunas e com o seguinte layout:

AAAA;asad;asdasdasd;asdasdad;asdasdasdasd;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwerwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXCV
AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123A@231231|23123|123123;ERTEYRTYE

Neste caso gostaria de saber como posso realizar uma validação na coluna 6 porem esta coluna possui dois padrões de delimitadores que são informações divididas por tres pipes onde uma "@" é o delimitador. O X da questão é como valida uma coluna onde tem um campo que tem outros campos dentro ?

Tipo como faço para realizar uma validação nesta 6 coluna, sendo que nela o padrão de delimitadores é outro.

Se puderem dar uma help.

Valeu Pessoal

Boa noite, veja se é o que precisa.
awk -F '[;|@]' '{print $7,$8,$9,$10,$11,$12}' texto  

2131231 123123 231231 23123 123123 SDASDADA
2131231 123123 231231 23123 123123 VCBCVXXCV
2131231 123123A 231231 23123 123123 ERTEYRTYE


Marcelo Oliver



3. Re: AWK - como validar arquivo com mais de um delimitador

Alexandre Rodrigues Bernardes
Bernardes02

(usa Linux Mint)

Enviado em 19/06/2018 - 15:16h


Boa noite, veja se é o que precisa.
awk -F '[;|@]' '{print $7,$8,$9,$10,$11,$12}' texto  

2131231 123123 231231 23123 123123 SDASDADA
2131231 123123 231231 23123 123123 VCBCVXXCV
2131231 123123A 231231 23123 123123 ERTEYRTYE


Marcelo Oliver


Boa Tarde Marcelo,
FIcou muito Bom, fiz alguns teste o resultado foi satisfatorio.

Criei quatros arquivos com o mesmo layout porem na quinta coluna do sexto campo adicionei um caractere diferente do númerico e tentei realizar uma lista negada a partir do que me ensinou:

cat texto03.txt
AAAA;asad;asdasdasd;asdasdad;asdasdasdasd;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwerwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXCV
AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123A@231231|23123|123123;ERTEYRTYE

cat texto02.txt
AAAA;asad;asdasdasd;asdasdad;asdasdasdasd;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwerwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXCV
AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123A@231231|23123|123123;ERTEYRTYE

cat texto01.txt
AAAA;asad;asdasdasd;asdasdad;asdasdasdasd;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwerwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXCV
AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123@231231|23123|123123;ERTEYRTYE

cat texto00.txt
AAAA;asad;asdasdasd;asdasdad;asdasdasdasd;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwerwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXCV
AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123@231231|23123|123123;ERTEYRTYE

Segue o comando feito:

for arq in texto*.txt
do
count_arq=""
count_arq=`cat $arq | awk -F"[;|@]" '{if ($8 ~ /[^0-9]/) print $0}'`
test -n $count_arq 2>>/dev/null
if [ $? -eq 0 ]
then
echo "$arq $count_arq"
fi
done


SAIDA:
texto00.txt
texto01.txt
texto02.txt AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123A@231231|23123|123123;ERTEYRTYE
texto03.txt AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123A@231231|23123|123123;ERTEYRTYE

Ele me retornou somente as linhas que continham caracteres alfanumeros no quinto campo da sexta coluna.

Ai queria saber, com o awk tem como realizar uma validação deste tipo ?
Exemplo:
O arquivo tem linhas onde as colunas são ";" e como no caso acima a sexta coluna contem uma informação delimitada por outro delimitadores como contem informações de tres colunas dividas por pipes e pode ocorre de haver mais informações que sao divididas por "@" , exemplo :
cat texto01.txt | awk -F";" '{print $(NF-1)}' 

2312312|2131231|123123
2312312|2131231|123123@231231|23123|123123
2312312|2131231|123123@231231|23123|123123

Não sei se tem como de um comando varrer o penúltimo campo(6º campo) e validar de forma diferenciada as informações dividas por pipe e @, tipo que validar todas terceira coluna deste sexto campo, conforme destacado abaixo:

cat texto01.txt | awk -F";" '{print $(NF-1)}' 

2312312|2131231|123123
2312312|2131231|123123@231231|23123|123123
2312312|2131231|123123@231231|23123|123123


4. Re: AWK - como validar arquivo com mais de um delimitador

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 19/06/2018 - 16:58h

Bernardes02 escreveu:


Boa noite, veja se é o que precisa.
awk -F '[;|@]' '{print $7,$8,$9,$10,$11,$12}' texto  

2131231 123123 231231 23123 123123 SDASDADA
2131231 123123 231231 23123 123123 VCBCVXXCV
2131231 123123A 231231 23123 123123 ERTEYRTYE


Marcelo Oliver


Boa Tarde Marcelo,
FIcou muito Bom, fiz alguns teste o resultado foi satisfatorio.

Criei quatros arquivos com o mesmo layout porem na quinta coluna do sexto campo adicionei um caractere diferente do númerico e tentei realizar uma lista negada a partir do que me ensinou:

cat texto03.txt
AAAA;asad;asdasdasd;asdasdad;asdasdasdasd;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwerwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXCV
AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123A@231231|23123|123123;ERTEYRTYE

cat texto02.txt
AAAA;asad;asdasdasd;asdasdad;asdasdasdasd;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwerwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXCV
AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123A@231231|23123|123123;ERTEYRTYE

cat texto01.txt
AAAA;asad;asdasdasd;asdasdad;asdasdasdasd;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwerwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXCV
AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123@231231|23123|123123;ERTEYRTYE

cat texto00.txt
AAAA;asad;asdasdasd;asdasdad;asdasdasdasd;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwerwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXCV
AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123@231231|23123|123123;ERTEYRTYE

Segue o comando feito:

for arq in texto*.txt
do
count_arq=""
count_arq=`cat $arq | awk -F"[;|@]" '{if ($8 ~ /[^0-9]/) print $0}'`
test -n $count_arq 2>>/dev/null
if [ $? -eq 0 ]
then
echo "$arq $count_arq"
fi
done


SAIDA:
texto00.txt
texto01.txt
texto02.txt AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123A@231231|23123|123123;ERTEYRTYE
texto03.txt AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123A@231231|23123|123123;ERTEYRTYE

Ele me retornou somente as linhas que continham caracteres alfanumeros no quinto campo da sexta coluna.

Ai queria saber, com o awk tem como realizar uma validação deste tipo ?
Exemplo:
O arquivo tem linhas onde as colunas são ";" e como no caso acima a sexta coluna contem uma informação delimitada por outro delimitadores como contem informações de tres colunas dividas por pipes e pode ocorre de haver mais informações que sao divididas por "@" , exemplo :
cat texto01.txt | awk -F";" '{print $(NF-1)}' 

2312312|2131231|123123
2312312|2131231|123123@231231|23123|123123
2312312|2131231|123123@231231|23123|123123

Não sei se tem como de um comando varrer o penúltimo campo(6º campo) e validar de forma diferenciada as informações dividas por pipe e @, tipo que validar todas terceira coluna deste sexto campo, conforme destacado abaixo:

cat texto01.txt | awk -F";" '{print $(NF-1)}' 

2312312|2131231|123123
2312312|2131231|123123@231231|23123|123123
2312312|2131231|123123@231231|23123|123123

Boa tarde Bernardes.
Limite o CAMPO, para que case somente se satisfizer a regex.
awk -F"[;|@]" '$8 ~ /^[^0-9]+$/ {print $0}' testes.txt 


marcelo oliver


5. Re: AWK - como validar arquivo com mais de um delimitador

Alexandre Rodrigues Bernardes
Bernardes02

(usa Linux Mint)

Enviado em 19/06/2018 - 19:14h


Boa tarde Bernardes.
Limite o CAMPO, para que case somente se satisfizer a regex.
awk -F"[;|@]" '$8 ~ /^[^0-9]+$/ {print $0}' testes.txt 


marcelo oliver[/quote]

Pior que não deu certo, não retornou nenhum linha.


6. AWK - como validar arquivo com mais de um delimitador sendo os delimitadores os caracteres "[" e "]"

Alexandre de Medeiros Poulis
poulis

(usa Red Hat)

Enviado em 29/08/2018 - 13:13h

Boa Tarde pessoal,

estou com um cenário parecido, porém meus delimitadores são 8 caracteres e dentre eles tenho os "[" e "]". Como consigo utilizar dentro deste cenário? Muito Obrigado.


msoliver escreveu:

Bernardes02 escreveu:

Boa Noite Pessoal,

Me deparei com uma dúvida na questão de validação de arquivos com mais de um tipo de delimitador.

Exemplo:

Tenho um arquivo com 6 colunas e com o seguinte layout:

AAAA;asad;asdasdasd;asdasdad;asdasdasdasd;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwerwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXCV
AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123A@231231|23123|123123;ERTEYRTYE

Neste caso gostaria de saber como posso realizar uma validação na coluna 6 porem esta coluna possui dois padrões de delimitadores que são informações divididas por tres pipes onde uma "@" é o delimitador. O X da questão é como valida uma coluna onde tem um campo que tem outros campos dentro ?

Tipo como faço para realizar uma validação nesta 6 coluna, sendo que nela o padrão de delimitadores é outro.

Se puderem dar uma help.

Valeu Pessoal

Boa noite, veja se é o que precisa.
awk -F '[;|@]' '{print $7,$8,$9,$10,$11,$12}' texto  

2131231 123123 231231 23123 123123 SDASDADA
2131231 123123 231231 23123 123123 VCBCVXXCV
2131231 123123A 231231 23123 123123 ERTEYRTYE


Marcelo Oliver





7. Re: AWK - como validar arquivo com mais de um delimitador

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 29/08/2018 - 18:41h

poulis escreveu:

Boa Tarde pessoal,

estou com um cenário parecido, porém meus delimitadores são 8 caracteres e dentre eles tenho os "[" e "]". Como consigo utilizar dentro deste cenário? Muito Obrigado.


msoliver escreveu:

Bernardes02 escreveu:

Boa Noite Pessoal,

Me deparei com uma dúvida na questão de validação de arquivos com mais de um tipo de delimitador.

Exemplo:

Tenho um arquivo com 6 colunas e com o seguinte layout:

AAAA;asad;asdasdasd;asdasdad;asdasdasdasd;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwerwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXCV
AAAA;fgdfg;dfvcx;tyrtyrt;bnmbnmgh;2312312|2131231|123123A@231231|23123|123123;ERTEYRTYE

Neste caso gostaria de saber como posso realizar uma validação na coluna 6 porem esta coluna possui dois padrões de delimitadores que são informações divididas por tres pipes onde uma "@" é o delimitador. O X da questão é como valida uma coluna onde tem um campo que tem outros campos dentro ?

Tipo como faço para realizar uma validação nesta 6 coluna, sendo que nela o padrão de delimitadores é outro.

Se puderem dar uma help.

Valeu Pessoal

Boa noite, veja se é o que precisa.
awk -F '[;|@]' '{print $7,$8,$9,$10,$11,$12}' texto  

2131231 123123 231231 23123 123123 SDASDADA
2131231 123123 231231 23123 123123 VCBCVXXCV
2131231 123123A 231231 23123 123123 ERTEYRTYE


Marcelo Oliver




Boa noite Poulis.
Abra um tópico detalhado para que possamos ajuda-lo.

marcelo oliver



8. Re: AWK - como validar arquivo com mais de um delimitador

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 29/08/2018 - 19:16h

Bernardes02 escreveu:


Boa tarde Bernardes.
Limite o CAMPO, para que case somente se satisfizer a regex.
awk -F"[;|@]" '$8 ~ /^[^0-9]+$/ {print $0}' testes.txt 


marcelo oliver


Pior que não deu certo, não retornou nenhum linha.[/quote]

Boa noite Bernardes.
Juntei os quatro arquivos e executei o comando....
cat texto.txt

AAAA;asad;asdas;asdasdad;asdasda;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXC
AAAA;fgdf;dfvcx;tyrtyrts;bnmbnmg;2312312|2131231|123123A@231231|2323|123123;ERTEYRTY
AAAA;asad;asdas;asdasdad;asdasda;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXC
AAAA;fgdf;dfvcx;tyrtyrtq;bnmbnmg;2312312|2131231|123123A@21231|23123|123123;ERTEYRTY
AAAA;asad;asdas;asdasdad;asdasda;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXC
AAAA;fgdf;dfvcx;tyrtyrta;bnmbnmg;2312312|2131231|123123@231231|23123|123123;ERTEYRTY
AAAA;asad;asdas;asdasdad;asdasda;2312312|2131231|123123@231231|23123|123123;SDASDADA
AAAA;rwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|ABCDEF@231231|23123|123123;VCBCVXXC
AAAA;fgdf;dfvcx;tyrtyrtt;bnmbnmg;2312312|2131231|123123@231231|23123|123123;ERTEYRTY


awk -F"[;@]" '$8 ~ /^[^0-9]+$/ {print $8}' texto.txt 
SDASDADA
VCBCVXXCV
ERTEYRTYE
SDASDADA
VCBCVXXCV
ERTEYRTYE
SDASDADA
VCBCVXXCV
ERTEYRTYE
SDASDADA
VCBCVXXCV
ERTEYRTYE


Se negar os NÚMEROS no campo 8, não printa NADA, pois todos registros tem NÚMEROS no campo 8.
O comando abaixo, casa os registros cujo campo oito só tem NúMERO.
awk -F"[;|@]" '$8 ~ /^([0-9]+)$/ {OFS="\n";print NR,$0,$8}' texto.txt
1
AAAA;asad;asdas;asdasdad;asdasda;2312312|2131231|123123@231231|23123|123123;SDASDADA
123123
2
AAAA;rwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXC
123123
4
AAAA;asad;asdas;asdasdad;asdasda;2312312|2131231|123123@231231|23123|123123;SDASDADA
123123
5
AAAA;rwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXC
123123
7
AAAA;asad;asdas;asdasdad;asdasda;2312312|2131231|123123@231231|23123|123123;SDASDADA
123123
8
AAAA;rwer;jkhjk;hjkjhkhj;weqweqw;2312312|2131231|123123@231231|23123|123123;VCBCVXXC
123123
9
AAAA;fgdf;dfvcx;tyrtyrta;bnmbnmg;2312312|2131231|123123@231231|23123|123123;ERTEYRTY
123123
10
AAAA;asad;asdas;asdasdad;asdasda;2312312|2131231|123123@231231|23123|123123;SDASDADA
123123
12
AAAA;fgdf;dfvcx;tyrtyrtt;bnmbnmg;2312312|2131231|123123@231231|23123|123123;ERTEYRTY
123123

Sem o awk:
while read -r line;do
read -a fld <<< $(sed 's/[;|@]/ /g' <<< "$line");
[[ ${fld[7]} =~ ^([0-9]+)$ ]] && echo -e "${fld[7]}\n${fld[@]}";
done<texto.txt

Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts