
Tengo un archivo CSV que contiene alrededor de 25 columnas. Algunas filas del archivo contienen 26 columnas, por lo que quiero buscar las líneas que contienen esa columna adicional y eliminarlas para poder usar awk con todo el archivo.
Los campos están separados por; Punto y coma. La columna adicional tiene el formato deVARNAME="El texto está aquí"y el valor "el texto está aquí" es texto arbitrario.
logré quitar elNOMBREVARIAde todas las líneas pero no puedo explorar un patrón que coincida con el valor arbitrario (el texto citado).
Mi objetivo es encontrar líneas con esa columna adicional (VARNAME="El texto está aquí") y retírelo.
Ejemplo:
Archivo actual:
ROW1: VAR1:"Value 1";VAR2="Value 2";VAR3="Value 3"
ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="Different Values";VAR3="Value 6"
El archivo de destino debe ser:
ROW1: VAR1:"Value 1";VAR2="Value 2";VAR3="Value 3"
ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"
Respuesta1
Puedes usar algo como:
sed 's/;VAREXT.[^;]*//' file #combine with -i for in-place editing
Pruebas:
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"
Respuesta2
Esperando que su csv no tenga encabezado, no haya espacios después del punto y coma y solo uno VAREXT...
por línea, entonces, con respecto a su muestra, intente:
sed 's/;VAREXT=\"[A-Za-z0-9 ]*\"//' in.csv
donde el valor deVAREXTpodría ser una combinación de letras, dígitos y espacios.