Remova a coluna específica se existir no arquivo CSV

Remova a coluna específica se existir no arquivo CSV

Tenho um arquivo CSV que contém cerca de 25 colunas. Algumas linhas do arquivo contêm 26 colunas, então quero procurar as linhas que contêm essa coluna extra e removê-la para poder usar o awk com o arquivo inteiro.

Os campos são separados por; Ponto e vírgula. A coluna extra está no formato deVARNAME="O texto está aqui"e o valor "o texto está aqui" é um texto arbitrário.

consegui remover oVARNAMEde todas as linhas, mas não consigo explorar um padrão que corresponda ao valor arbitrário (o texto citado).

Meu objetivo é encontrar linhas com essa coluna extra (VARNAME="O texto está aqui") e remova-o.

Exemplo:

Arquivo atual:

ROW1: VAR1:"Value 1";VAR2="Value 2";VAR3="Value 3"
ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="Different Values";VAR3="Value 6"

O arquivo de destino deve ser:

ROW1: VAR1:"Value 1";VAR2="Value 2";VAR3="Value 3"
ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"

Responder1

Você pode usar algo como:

sed 's/;VAREXT.[^;]*//' file  #combine with -i for in-place editing

Teste:

a=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="Different Values";VAR3="Value 6"'
b=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="1234567";VAR3="Value 6"'
c=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="VAREXT";VAR3="Value 6"'

echo "$a" |sed 's/;VAREXT.[^;]*//'
echo "$b" |sed 's/;VAREXT.[^;]*//'
echo "$c" |sed 's/;VAREXT.[^;]*//'

"ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"
"ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"
"ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"

Responder2

Esperando que seu csv não tenha cabeçalho, não haja espaços após ponto e vírgula e apenas um VAREXT...por linha, então com relação à sua amostra, tente:

sed 's/;VAREXT=\"[A-Za-z0-9 ]*\"//' in.csv

Onde o valor deVAREXTpode ser um composto de letras, dígitos e espaços.

informação relacionada