
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.