Como extrair um único valor de tuplas de linha única?

2

Eu tenho um arquivo de despejo de um banco de dados no seguinte formato

('value1','value2',value3','value4'),('value1','value2',value3','value4'),...

Eu quero primeiro ter cada tupla em uma única linha e, em seguida, gostaria de exportar apenas um único valor (ou seja, value3 de cada tupla)

    
por curious 11.10.2013 / 13:45

1 resposta

3

Colocando cada tupla em uma linha separada:

sed 's@)\s*,\s*(@)\n(@g' your_file

Para aplicar modificações ao arquivo (em vez de imprimir o arquivo modificado para stdout):

sed -i 's@)\s*,\s*(@)\n(@g' your_file

Para relatar apenas value3 (assumindo um arquivo modificado):

awk -F',' '{print $3}' <your_new_file

Isso pressupõe que os próprios valores não contêm , . Veja o comentário de Michael abaixo.

Para fazer tudo de uma só vez (sem modificar o arquivo):

sed 's@)\s*,\s*(@)\n(@g' your_file | awk -F',' '{print $3}'

Para simplificar a chamada acima de awk , aproveitei o fato de que, dado seu exemplo, podemos dividir a entrada em , e value3 será o terceiro valor e não terá nenhum parêntese nele. Se você quisesse value1 ou value4 , você pode fazer algo como:

sed 's@)\s*,\s*(@)\n(@g' your_file | awk -F',' '{print $1}' | sed 's/[()]//'

Isso, obviamente, pressupõe que seus valores não tenham parentes em seu conteúdo.

    
por 11.10.2013 / 13:52