Buen día. Realmente podría usar tu ayuda en este caso. Tengo un archivo de texto de estadísticas en el siguiente formato.
ID=1000000
Name=Name1
Field1=Value1
...(Fields 2 to 25)
Field26=Value26
ID=1000001
Name=Name2
Field1=Value1
...(Fields 2 to 25)
Field26=Value26
ID=1000002
Name=Name2
Field1=Value1
...(Fields 2 to 25)
Field26=Value26
...goes up to 15000
Tengo un archivo de texto de personas activas separado por saltos de línea.
Name2
Name5
Name11
Name12
...goes up to 1400 Random Names
Necesito poder eliminar registros del archivo de texto de estadísticas (ID, Nombre, Campos 1 a 26) si el nombre no se encuentra en el archivo de texto de personas activas. En el ejemplo anterior, el registro asociado para Nombre1 (ID, Nombre, Campos1 a 26) debe eliminarse ya que no está en el archivo de texto de personas activas.
Intenté reformatear el archivo de estadísticas a través de Notepad ++ usando TextFX-> Quick-> Find / Reemplazar para convertirlo en un archivo separado por comas con cada registro separado por un salto de línea. Lo reorganicé para
ID Name Field1 ...Fields2 to Fields 25... Field26
1000000 Name1 Value1 ...Value2 to Value 25... Value26
1000001 Name2 Value1 ...Value2 to Value 25... Value26
1000002 Name3 Value1 ...Value2 to Value 25... Value26
Lo abrí con Excel y creé dos tablas (tabla de estadísticas y una tabla de nombres activos) en mysql usando el archivo csv. No estoy seguro de cómo procesar esto en una función automática. Además de eliminar registros inactivos, el otro problema que tengo es reescribirlo a su formato anterior.
He estado haciendo todo lo posible para resolver esto durante horas. ¿Hay alguna solución que no requiera que use buscar, copiar, pegar y cambiar entre los dos archivos 1400 veces? Estoy abierto a usar diferentes métodos / programas para simplificar el proceso. Desafortunadamente, tengo que mantener el archivo de estadísticas en este formato.
He golpeado una pared con este. Por favor ayuda. Gracias.
Respuestas:
En casi cualquier sistema BSD o Linux (escribí esto en OS X) puede usar el siguiente script bash
filter.sh
:Almacene su lista de usuarios activos originales como
active.txt
y el archivo de estadísticas modificadostats.txt
Hagafilter.sh
ejecutable usandochmod +x filter.sh
y ejecútelo:Imprimirá las entradas de estadísticas activas en la salida estándar y las escribirá
result.txt
.fuente
done' ./filter.sh: line 11:
hecho 'No sé si ejecutar esto en cygwin es el camino a seguir. ¿También mantendría el formato original? ID = idhere Name = namehere Field1 = valuehere .... Field26 = valuehere Desafortunadamente, tengo que mantener las etiquetas de campo y los signos de igual. Espero su respuesta../filter.sh active.txt < stats.txt | tee result.txt
. Alternativamente, haga clic en el enlace junto a editado debajo de mi publicación y vea la primera versión que sugerí. Los nombres de los archivos estaban codificados en el propio script.Editar: interpreté mal la parte sobre csv en la pregunta. Solo estaba tratando de discutir la parte de salida.
Excel no es un paradigma de base de datos / conjunto de registros. En lugar de sobresalir, puede usar Access o excluir tal vez algo como Base de OpenOffice ( http://www.openoffice.org/product/base.html ). Importe los archivos como tablas, vincule las tablas, haga [magia], exporte archivos nuevos.
En Access, una forma loca de generar el archivo es crear una consulta que construya la cadena que desea:
Y luego guárdelo, luego expórtelo a un archivo de texto. Esto creará una consulta con un campo por registro. El 13 + 10 es combo de retorno de carro de Windows + salto de línea.
No es elegante
fuente
update table1 set flagField = 1 where fooName in (select name from table2)
); etc. Tenga en cuenta que almacenar el nombre en esa lista de nombres activos en lugar de su ID (única) esuh oh
: ¿cuál de los John Smith es el correcto?