Saltar al contenido principal

GREP

Busca datos en uno o mas archivos IPM en forma flexible.

Sintaxis

$ cardak help grep
usage: cardak grep [<flags>] <criteria> <files>...

Find data in files.

It can search for values regardless of the file format, and it has the ability to understand IPM records to specify in what fields to perform the search

Flags:
--help Show context-sensitive help (also try --help-long and --help-man).
-v, --verbose Add more information displayed on some commands.
--mono Supress color on output.
--ignore Try to ignore some errors and continue processing the file
-W, --width Ignore small terminal width check and force execution
-z, --silent Suppress all output (banner, headers, summary) except the results. Specially useful for DESCRIBE command piped to a search utility like fzf
--version Display program version and exit
-T, --file-type=FILE-TYPE Filter by file type when supplying several files. File types are represented by a single letter as: I-IPM files, M-MPE files
-R, --records=RECORDS List of record numbers to be searched. Values are separated by comma (,) and ranges are indicated by the starting and ending record separated by a hyphen (-)
-F, --fields=FIELDS List of IPM fields to search in (can use a filter name)
-I, --include=INCLUDE List of IPM fields to list from a matching record, even if these fields don-t have a match (can use a filter name)
--summary Only display file names and the matching count for each one.
--matches Only display file names and the list of record numbers that match.
-C, --code=CODE Filter by Function Code description

Args:
<criteria> Search criteria. This is a list of criteria, elements separated by a comma (,) are ANDed together, while elements separated by a semi-colon are ORed together. Each element
consists of an optional field descriptor followed by a colon (:) and the value to search. Field descriptors consist of an optional letter (D-DE fields, P-PDS fields) and the
corresponding field number. If the field descriptor consist of only numbers, then a three digit number is taken as a DE field, and a four digit number is taken as a PDS field.
An example could be: 'DE43:Supermarket' to search for records having field DE43 that contain the string "Supermarket"
<files> List of files. This can be a single file or you can use wildcards

Descripción

Este es seguramente uno de los comandos mas útiles y versátiles de la herramienta. Permite realizar búsquedas de datos en uno o varios archivos IPM.

La idea es tomada del comando grep de Unix, y a diferencia de éste, el GREP de CardAK reconoce el formato interno de los registros del archivo, lo que permite búsquedas mas precisas.

Un caso de uso es, por ejemplo, que necesitamos encontrar una transacción pero no sabemos en qué archivo se encuentra. En vez de abrir los archivos uno por uno, podemos hacer una búsqueda masiva con los datos identificatorios de la transacción y rápidamente encontrar en qué archivo o archivos se encuentra, y luego podemos realizar operaciones sobre esos archivos y registros.

Forma de uso

El comando recibe como primer parámetro es el criterio de búsqueda, y el resto son nombres de archivos donde realizar la búsqueda.

Ese primer parámetro consiste en una lista de criterios individuales, donde cada uno de ellos es, o bien un valor a buscar en todos los campos del registro, o bien un identificador de campo y el valor a buscar, separados por punto y coma (:). Este identificador de campo obedece a la forma normal de definir identificadores de campos (ver la sección Flags y Filtros para mas información)

Esta lista de criterios puede estar formada por uno o mas criterios. Los criterios separados por una coma (,) se unen mediante la operación lógica AND (o sea, deben cumplirse todos ellos para considerar una coincidencia), y los separados por punto y coma (;) se unen mediante la operación lógica OR

Podemos limitar la búsqueda solamente en algunos registros utilizando el flag -R donde especificamos los números de registro o rangos donde realizar la búsqueda.

También podemos limitar la búsqueda a ciertos campos utilizando el flag -F. En ese caso, la búsqueda solamente va a tomar en cuenta los campos indicados y no todos los campos del registro.

El comando muestra los campos y su valor en las coincidencia de la búsqueda, pero podemos también incluir otros campos del registro aunque no cumplan con el criterio buscado. Para ello podemos utilizar el flag --include (-I) con la lista de los campos que desamos que se muestren de los registros que hayan tenido una coincidencia.

Si aplicamos el flag --summary, solamente mostraremos los nombres de archivo y la cantidad de coincidencias encontradas en cada uno

Aplicando el flag --matches, mostraremos el nombre del archivo y la lista de registros donde se encontraron coincidencias.

Otro filtro que podemos aplicar para limitar la búsqueda, es mediante el flag --code (-C), donde podemos colocar un texto que forme parte de la descripción del Function Code deseado (por ejemplo “Second Presentment”, o “Partial”)

Ejemplo

Supongamos que tenemos algunos archivos y queremos encontrar una transacción. Los datos que tenemos de dicha transacción es que fue hecha por un importe de $112.60 y que el comercio fue un Supermercado. Podemos entonces hacer la búsqueda de la siguiente forma:

Campo del importe: DE004 Campo de Card Acceptor Name: D043

Por lo tanto hacemos la búsqueda global:

Ejemplo de grep

Perfecto, encontramos que esa transacción está en el archivo file8 y además está en el registro 512 de ese archivo.

Si además de los campos de búsqueda quisiéramos por ejemplo mostrar también los campos DE002 (Primary Account Number) y el DE012 (Fecha y Hora de la transacción) y el DE038 (el Approval Code), podríamos cambiar la consulta agregando el flag -I indicando esos campos:

Ejemplo de grep

Vemos que si bien los campos utilizados para la búsqueda son el DE004 y el DE043, mostramos además los campos DE002, DE012 y DE038 del registro encontrado.

Pero si quisiéramos mostrar el registro entero, no es necesario agregar la lista de campos sino que podemos utilizar el resultado de este comando con el comando PRINT haciendo uso del flag --last de esta forma:

Ejemplo de grep