Excluir linhas em um arquivo csv simplificado (uma nova linha por linha) com base em um valor de coluna específico

2

Eu tenho um arquivo csv com os seguintes cabeçalhos - Interaction_ID, PDB_ID, First_Residue, First_Chain, Second_Residue, Third_Residue, Third_Chain & Padrão:

AM_AUTO_1,1cx0,A166,B,C118,B,G129,B,A-minor Type I ACG                            
AM_AUTO_2,1cx0,A165,B,C119,B,G128,B,A-minor Type II ACG                           
AM_AUTO_3,1cx0,A166,B,C119,B,G128,B,A-minor Type II ACG                           
AM_AUTO_4,1ddy,A25,A,C21,A,G8,A,A-minor Type I ACG                            
AM_AUTO_5,1e7k,A33,C,C28,C,G45,C,A-minor Type 0 AGC                            
AM_AUTO_6,1e7k,A33,D,C28,D,G45,D,A-minor Type 0 AAU

O que eu gostaria de fazer é excluir linhas no arquivo csv onde Padrão =% Digite 0% e, em seguida, imprima o arquivo csv resultante. O resultado deve ser assim:

AM_AUTO_1,1cx0,A166,B,C118,B,G129,B,A-minor Type I ACG                            
AM_AUTO_2,1cx0,A165,B,C119,B,G128,B,A-minor Type II ACG                           
AM_AUTO_3,1cx0,A166,B,C119,B,G128,B,A-minor Type II ACG                           
AM_AUTO_4,1ddy,A25,A,C21,A,G8,A,A-minor Type I ACG  

Como eu posso fazer isso usando o awk?

    
por Sri 20.08.2014 / 13:47

2 respostas

1

Com awk , você pode fazer:

$ awk '$(NF-1)!=0' file
AM_AUTO_1,1cx0,A166,B,C118,B,G129,B,A-minor Type I ACG
AM_AUTO_2,1cx0,A165,B,C119,B,G128,B,A-minor Type II ACG
AM_AUTO_3,1cx0,A166,B,C119,B,G128,B,A-minor Type II ACG
AM_AUTO_4,1ddy,A25,A,C21,A,G8,A,A-minor Type I ACG

ou usando grep :

grep -v 'Type 0' file
    
por 20.08.2014 / 13:50
1

Usando awk :

awk -F, '$9!~/Type 0/{print $0}' file
AM_AUTO_1,1cx0,A166,B,C118,B,G129,B,A-minor Type I ACG
AM_AUTO_2,1cx0,A165,B,C119,B,G128,B,A-minor Type II ACG
AM_AUTO_3,1cx0,A166,B,C119,B,G128,B,A-minor Type II ACG
AM_AUTO_4,1ddy,A25,A,C21,A,G8,A,A-minor Type I ACG

Explicação:

Isso faz com que awk use , como delimitador ( -F, ). Se o nono campo não contiver "Tipo 0" ( $9!~/Type 0/ ), imprima a linha ( {print $0} ).

E uma solução sed :

sed '/,[^,]*Type 0[^,]*$/d' file
    
por 20.08.2014 / 13:57