On 2020-07-01 11:07, Tec. Comunicaciones Transgaviota Centro wrote:
Tengo un fichero de texto que tiene xyz módulos como este que pego a continuación
Todos los módulos tienen en común que empiezan con APP_LoTW_OWNCALL y terminan con <eor>
Pero se necesita que esos modulos sean exportados a otro fichero de texto en una sola línea los siguientes datos
SM7IUN 30M 10.13833 FT8 20200628 040615
Que son los valores de algunas de las filas, pues esos datos se necesitan luego para pegarlos en un Excel.
Cualquier ayuda desde ya se agradece.
<APP_LoTW_OWNCALL:4>T46W
<STATION_CALLSIGN:4>T46W
<CALL:6>SM7IUN
<BAND:3>30M
<FREQ:8>10.13833
<MODE:3>FT8
<APP_LoTW_MODEGROUP:4>DATA
<QSO_DATE:8>20200628
<APP_LoTW_RXQSO:19>2020-06-30 12:42:29 // QSO record inserted/modified at LoTW
<TIME_ON:6>040615
<APP_LoTW_QSO_TIMESTAMP:20>2020-06-28T04:06:15Z // QSO Date & Time; ISO-8601
<QSL_RCVD:1>Y
<QSLRDATE:8>20200630
<APP_LoTW_RXQSL:19>2020-06-30 12:42:29 // QSL record matched/modified at LoTW
<eor>
<APP_LoTW_OWNCALL:4>T46W
<STATION_CALLSIGN:4>T46W
<CALL:6>KC9GHA
<BAND:3>30M
<FREQ:8>10.13833
<MODE:3>FT8
<APP_LoTW_MODEGROUP:4>DATA
<QSO_DATE:8>20200628
<APP_LoTW_RXQSO:19>2020-06-30 12:42:29 // QSO record inserted/modified at LoTW
<TIME_ON:6>040345
<APP_LoTW_QSO_TIMESTAMP:20>2020-06-28T04:03:45Z // QSO Date & Time; ISO-8601
<QSL_RCVD:1>Y
<QSLRDATE:8>20200630
<APP_LoTW_RXQSL:19>2020-06-30 12:42:29 // QSL record matched/modified at LoTW
<eor>
Saludos Cordiales,
M.Sc. Wilfredo Martínez Consuegra
Técnico en Comunicaciones
Transgaviota CENTRO
Cayo Las Brujas, Villa Clara.
Teléfono Trabajo: +53 42 350080 ext 116
Teléfono Celular: +53 53 664 665
_______________________________________________
Gutl-l mailing list -- gutl-l@listas.jovenclub.cu
To unsubscribe send an email to gutl-l-leave@listas.jovenclub.cu
Supon que pones todo eso en un archivo llamado sample, entoces puedes correr algo como
ulises@ulises-kub:/tmp$ paste -s sample | sed -r 's/<eor>/\r\n/' | awk '{ print $3" "$4" "$5" "$6" "$8" "$17 }' | sed 's/<CALL:6>//;s/<BAND:3>//;s/<FREQ:8>//;s/<MODE:3>//;s/<QSO_DATE:8>//;s/<TIME_ON:6>//'
Para obtener el resultado....
SM7IUN 30M 10.13833 FT8 20200628 040615
KC9GHA 30M 10.13833 FT8 20200628 040345
Se que el ultimo sed es una puercada, se que hay una forma de decirle a sed que en lugar de abarcar lo mas que pueda con una regex solo abarque lo menos posible, pero ahora luego de buscar un poco no he encontrado la opcion, pero yo se que existe pues la use anhos atras, si la encuentras toda esa linea se puede simplificar a algo como
paste -s sample | sed -r 's/<eor>/\r\n/' | awk '{ print $3" "$4" "$5" "$6" "$8" "$17 }' | sed -r 's/<.*>//N'
Donde solo cambiarias la "N" final por la letra que toca, pues creo que era algo que se ponia al final, pero no estoy seguro, de momento puedes usar el seboruco ese para hacer el trabajo sucio de una forma un poco sucia
Como ya te dije el archivo sample tiene los datos que diste
ulises@ulises-kub:/tmp$ cat sample
<APP_LoTW_OWNCALL:4>T46W
<STATION_CALLSIGN:4>T46W
<CALL:6>SM7IUN
<BAND:3>30M
<FREQ:8>10.13833
<MODE:3>FT8
<APP_LoTW_MODEGROUP:4>DATA
<QSO_DATE:8>20200628
<APP_LoTW_RXQSO:19>2020-06-30 12:42:29 // QSO record inserted/modified at LoTW
<TIME_ON:6>040615
(...)
Suerte