Como posso encontrar e filtrar uma coluna específica em um arquivo .csv? [duplicado]

1

Eu tenho arquivos .csv com a seguinte estrutura:

cat,dog,mouse,pig,bird,cow,...
21,34,54,566,78,1,...
23,10,12,569,56,4,...
32,20,13,123,56,3,...
34,30,44,322,66,2,...

Eu quero filtrar a coluna relacionada ao mouse, por exemplo:

54
12
13
44

Como faço isso? Por favor, tenha em mente que eu não sei em qual coluna o mouse foi encontrado (meus arquivos são muito grandes, existem vários arquivos para filtrar e as posições das colunas variam).

Se eu soubesse a posição exata, poderia usar, por exemplo:

cat $file | awk '{printf("%s\n", $3);}' > filtered_file

E se eu não souber o mouse na coluna 3?

Eu realmente aprecio qualquer ajuda.

    
por Bruno 14.03.2013 / 22:14

1 resposta

3

Você pode fazer assim:

#!/bin/bash

file=$1
column=$2
seperator=','

# Check if a csv file and a column name is given.
if [[ -z $file || -z $column ]]; then
  echo "Usage: $0 csvfile column"
  exit 1
fi

# Iterate through the first row and try to find the requested column.
field=1
for column_name in $(head -n 1 $file | tr $seperator ' '); do
  [[ $column_name == $column ]] && break
  field=$((field+1))
done

# Finally print the output.
cat $file | cut -d $seperator -f $field | sed "1d"

(Créditos: Eu tenho a idéia de como obter a primeira linha de este post no stackoverflow e a idéia de como deletar a primeira linha de este post no unix.com ).

    
por 14.03.2013 / 23:46