Estamos analizando algunos archivos EDI grandes que no contienen CR / LF. Sin embargo, tienen ~
( tilde ) como un delimitador de segmento.
Estoy tratando de extraer el registro de control para el archivo y los últimos bytes de mi archivo de 120 MB se parecen a esto:
~REF*1L*0711882~SE*62300*39093~GE*1*500001242~IEA*1*500001241~
Solo hay un registro de control en el archivo y siempre comienza con ~SE
.
Entonces, ¿hay una manera fácil de usar Unix estándar cortar , awk , grep , etc. herramientas para cortar este archivo para obtener el segmento SE * 62300 * 39093, aparte de convertir el ~
a CRLF y siguiendo las últimas tres líneas del archivo?
Renuncia:
No soy un gurú de Unix, por lo que la respuesta puede ser obvia para un usuario experimentado. Además, no tengo control sobre el formato de archivo.
tail
. No hay necesidad de analizarlo todo. Algo como tail edi_file | grep ~SE | cut -d'~' -f 3
(donde edi_file es el nombre de su archivo grande) (Descargo de responsabilidad: el ejemplo solo funciona si el campo requerido está en el campo # 3 (delimitado por ~ 's como por -d ~
. Eso podría necesitar un ajuste. ¿Podemos obtener un ejemplo más grande del archivo de entrada?
tail --bytes=5000 ding
... y luego esperas que los últimos 5000 bytes sean suficientes para abarcar las 3 líneas que necesitas.
~
a nuevas líneas y siguiendo las últimas 3 líneas del archivo. Si se sabe que el archivo no contiene nuevas líneas, esto no introduce ninguna ambigüedad en el formato y, francamente, es la mejor forma de incluir el archivo en un formato que facilite el trabajo de todas las herramientas basadas en líneas.