Filtrar coluna que contém

1. Filtrar coluna que contém

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 12/08/2019 - 19:23h


Dentre os campos de um .csv preciso retornar/filtrar somente a coluna com o cabeçalho '$VAR' (string) , como fazer ?


  


2. Re: Filtrar coluna que contém

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/08/2019 - 20:14h


Mauricio, posta um exemplo do seu arquivo .csv, e qual campo deseja.
Att.: Marcelo Oliver


3. Re: Filtrar coluna que contém

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 12/08/2019 - 20:21h

msoliver escreveu:


Mauricio, posta um exemplo do seu arquivo .csv, e qual campo deseja.
Att.: Marcelo Oliver


então kra ... a primeira linha contem o cabeçalho ( que o usuário vai digitar qual ele quer filtrar ) o resto é só numeros.

ex:
col1,col2,col3
123,456,789
456,789,123
789,456,123


entendeu ??? como o rótulo da coluna é o usuário que vai digitar eu vou jogar ele na variável 'VAR'

EDIT: no caso o usuário vai digitar é o rótulo e não o número da coluna !!!


------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




4. Re: Filtrar coluna que contém

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/08/2019 - 20:56h

Mauriciodez escreveu:

msoliver escreveu:


Mauricio, posta um exemplo do seu arquivo .csv, e qual campo deseja.
Att.: Marcelo Oliver


então kra ... a primeira linha contem o cabeçalho ( que o usuário vai digitar qual ele quer filtrar ) o resto é só numeros.

ex:
col1,col2,col3
123,456,789
456,789,123
789,456,123


entendeu ??? como o rótulo da coluna é o usuário que vai digitar eu vou jogar ele na variável 'VAR'

EDIT: no caso o usuário vai digitar é o rótulo e não o número da coluna !!!


------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------


Acho que entendi . . .
#Cria Array com o cabeçalho
cabecalho=($(sed -n '1p' textocsv|sed 's/,/ /g'))
read -p " Informe o campo: "
#Busca o campo informado no ARRAY cabeçalho, e pega o nº do campo.
NCAMPO=$(grep -Eo ".*${REPLY}" <<< ${cabecalho[@]}|awk '{print NF}')
sed '1d' textocsv|cut -d"," -f${NCAMPO} # O sed é para eliminar a linha com o cabeçalho, se quer mostrar.... elimine-o....
#cut -d"," -f${NCAMPO} textocsv

Importante => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


5. Re: Filtrar coluna que contém

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 12/08/2019 - 21:46h

eu estava tentando fazer com um while ou until mas tô perdido , tipo assim

se a primeira palavra não for $VAR
retorne a coluna i
i = i +1
senao
retorne a coluna 1

entendeu , enquanto ele não acha a variavel na primeira palavra ele vai retornando as colunas, quando ele achar ele vai retornar a primeira coluna, que na situação vai ser justamente a coluna que tem como rótulo a string que o user digitou, fazer assim vai ser mais facil pra eu entender.

é mais ou menos o que eu estou tentando fazer e não estou conseguindo

i=1
while [ $(cut -d',' -f $i t.txt | head -n 1) != $VAR ]; do
cut -d',' -f $i t.txt | head -n 1
let i=i+1
done



------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




6. Re: Filtrar coluna que contém

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/08/2019 - 22:34h

Enquanto não DIGITAR um CAMPO existente no CABEÇALHO, fica perguntando....
while :;do 
read -p "Campo: " CAMPO;
if grep -Eow "$CAMPO" textocsv;then
echo ENCONTROU;
break;
fi;
done

Opção para o usuário escolher somente os cabeçalhos que existem!
CAMPO=$(zenity --list --title="" --width=120 --height=240  --text "Opções:" --radiolist --column "X" --column "Opções" $(awk -F',' 'NR==1 {for(n=1;n<=NF;n++0) printf "false %s\n" ,$n}' texto) 2>/dev/null)

Att.: Marcelo Oliver


7. Re: Filtrar coluna que contém

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/08/2019 - 15:23h

Mauricio, segue, testado e funcionando...
while :;do 
read -p " Informe o Campo: " CAMPO;
NumCampo=$(awk -F"," 'NR==1 {for(x=1;x<=NF;x++) if($x~/'${CAMPO}'/) printf "%s\n" ,x}' texto.csv);
if [ ${NumCampo} ];then
echo -e " \"$CAMPO\", Existe no cabeçalho, e é o Nº ${NumCampo}\n";
awk -F"," 'NR>1 { printf "%s\n" ,$'${NumCampo}'}' texto.csv
break;
else
echo -e " \"$CAMPO\" NÃO Existe no cabeçalho! \n";
fi;
done

cat texto.csv
col1,col2,col3,col4,col5,col6
11,12,13,14,15,16
21,22,23,24,25,26
31,32,33,34,35,36
41,42,43,44,45,46
51,52,53,54,55,56

Att.: Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts