Bernardes02
(usa Linux Mint)
Enviado em 09/06/2017 - 19:56h
msoliver escreveu:
Bernardes02 escreveu:
msoliver escreveu:
Bernardes02 escreveu:
Boa Tarde Pessoal,
Estou com uma duvida aqui, em como posso deletar ou truncar uma coluna de uma linha sem comprometer o restante da informação.
Exemplo:
Tenho um arquivo com 6 linhas de 5 colunas, e a coluna 4 só comporta ate 4 posições e queria truncar as informações da coluna 4 com somente 4 posições menosprezando o tiver mais que isso, mas não comprometendo o restante do arquivo:
cat teste01.TXT
2016|1231231231|413123123123|123123123123 |12312sdadasd123123
2016|1231231231|413123123123|1231 |12312sdadasd123123
2016|1231231231|413123123123|123123123123 |12312sdadasd123123
2016|1231231231|413123123123|1231 |12312sdadasd123123
2016|1231231231|413123123123|123123123123 |12312sdadasd123123
2016|1231231231|413123123123|123123123123 |12312sdadasd123123
Tenhos estas 4 linhas quero alterar:
cat teste01.txt |awk -F "|" '{if(length($4) > 4)print $0}'
2016|1231231231|413123123123|123123123123|12312sdadasd123123
2016|1231231231|413123123123|123123123123|12312sdadasd123123
2016|1231231231|413123123123|123123123123|12312sdadasd123123
2016|1231231231|413123123123|123123123123|12312sdadasd123123
Resultado que eu quero:
2016|1231231231|413123123123|1231 |12312sdadasd123123
2016|1231231231|413123123123|1231 |12312sdadasd123123
2016|1231231231|413123123123|1231 |12312sdadasd123123
2016|1231231231|413123123123|1231 |12312sdadasd123123
2016|1231231231|413123123123|1231 |12312sdadasd123123
2016|1231231231|413123123123|1231 |12312sdadasd123123
Tentei fazer um substring mas ele só me trouxe o resultado da coluna menosprezando todo o resto.
cat teste01.txt | awk -F "|" '{ print substr($4,0,4)}'
1231
1231
1231
1231
1231
1231
Poderiam me ajudar ?
Boa tarde Bernardes.
Segue sugestão:
while IFS="|" read -r C1 C2 C3 C4 C5;do echo "$C1|$C2|$C3|${C4:0:4} |$C5"; done < teste01.txt
2016|1231231231|413123123123|1231|12312sdadasd123123
2016|1231231231|413123123123|1231|12312sdadasd123123
2016|1231231231|413123123123|1231|12312sdadasd123123
2016|1231231231|413123123123|1231|12312sdadasd123123
2016|1231231231|413123123123|1231|12312sdadasd123123
2016|1231231231|413123123123|1231|12312sdadasd123123
Ou, com base no seu comando . . .
awk -F "|" '{OFS="|"; print $1,$2,$3,substr($4,1,4),$5}' teste01.txt
att.:
marcelo oliver
Boa Noite Marcelo,
Excelente, era isso mesmo que estava procurando. Muito Obrigado mesmo.
se caso eu querer remover registros duplicados nesta coluna eu posso utilizar basicamente o mesmo layout do comando mudando apenas o comando desejado ?
Mas obrigado pela ajuda!
Obrigado!
Bernardes,
Vc gostaria de remover o CAMPO 4, caso ele "apareça" em outra linha, é isso?
mso
Marcelo,
isso mesmo, tipo como parâmetro único o campo 4:
2016|1231231231|413123123123|
1232323231 |12312123123
2016|1231231231|413123123123|1231|12312sdadasd123123
2016|1231231231|413123123123|
1232323231 |12312sdadasd123123
e ficar assim:
2016|1231231231|413123123123|1231|12312sdadasd123123
2016|1231231231|413123123123|1232323231|12312sdadasd123123
Como se tudo que for duplicado no campo 4 for excluído deixando somente um registro.
!/bin/sh
# Arquivo "duplicidade.txt" contém os registros duplicados
A_IFS=$IFS
IFS=$’\n’
fpl=$(cat duplicidade01.txt)
for i in $fpl
do
sort teste01.txt | awk -F "|" '{ if ($4 == $fpl) print $0}' | uniq | grep -vf $fpl > teste.txt
done
IFS=$A_IFS
Tentei isolar estes registros duplicados em um arquivo e utilizamos para remover no arquivo teste01, porem removi foi todos os registros duplicados não deixando o original por exemplo kkk não consegui sair disso
Tambem tentei fazer uma lista negada, mas não consegui o que queria, nesse estava querendo isolar somente os números e ignorar o caracteres alfanuméricos:
#!/bin/bash
#
f1=$(cat teste01.txt | awk -F"|" '{if ($5 ~ /[^0-9]/) print $0}' )
#
for a in teste01.txt
do
#
#
cat $a | awk -F "|" '{OFS="|"; print $1,$2,$3,$4,$f1}'
#
done
Tipo:
2016|1231231231|413123123123|1231|12312123123
2016|1231231231|413123123123|1231|12312sdadasd123123
2016|1231231231|413123123123|1231|12312sdadasd123123
E ficar assim:
2016|1231231231|413123123123|1231|12312123123
2016|1231231231|413123123123|1231|12312123123
2016|1231231231|413123123123|1231|12312123123
Neste caso queria para manipular a nível de coluna mesmo sem alterar o restante da linha, não sei se da. Tipo para utilizar o uniq por exemplo este falo no caso dos registros duplicados.
Mas Obrigado Marcelo, estou pedindo muito ja kkkkkk