Sort in output file

Hi team,
I’ am having an issue when I need to see the output from a file. I need to have the file ordered, but it is going wrong.
I need to know how can to ordered the file once created. Do you know some function or def?
I attached a sample.
For example in this example i need to have the datetime , EG: [2024-08-19 10:25:38,xxx] ordered

[2024-08-19 10:25:38,742] - <MSG>[ID:01417437]==>Request Message received from Binding: argCosmosAsync_forIncomingPaymentConsumer</MSG>
[2024-08-19 10:25:38,743] - <MSG>[ID:01417437]==>[App:app-arg-cosmos-async_for-incoming-payment][TxnType:{1}] received transaction</MSG>
[2024-08-19 10:25:38,745] - <MSG>[ID:01417437]==>Debug: Action Code=  {2} {3} {4} {5}</MSG>
[2024-08-19 10:25:38,749] - <MSG>[ID:01417437]==>Calling service argFlexibusJMSPosting asynchronously, timeout=0</MSG>
[2024-08-19 10:25:38,749] - <MSG>[ID:01417437]==>Request Message sent to Binding: argFlexibusJMSPosting</MSG>
[2024-08-19 10:25:38,749] - <MSG>[ID:01417437]==>Status changed to [DONE]</MSG>
[2024-08-19 10:25:26,426] - <MSG>[ID:17449859]==>Request Message received from Binding: argCoelsaCashout</MSG>
[2024-08-19 10:25:26,426] - <MSG>[ID:17449859]==>path= /lws/arg-coelsa-cashout/AvisoCashOutPendiente</MSG>
[2024-08-19 10:25:26,429] - <MSG>[ID:17449859]==>Response Message sent to Binding: argCoelsaCashout. Exchange status: DONE. Mapped response code: null</MSG>
[2024-08-19 10:25:26,429] - <MSG>[ID:17449859]==>Status changed to [DONE]</MSG>

it shows [2024-08-19 10:25:38,742] before than [2024-08-19 10:25:26,426] for example

The file is located in /cxpslogs/txfind/scripts/output/search_006

Ivan, or perhaps Silva,

What you are asking for is not hard if you do it a step at a time.

But first, be clear on exactly what you want.

  • Is the file already in existence or is the data still in your current python program?
  • If it is just in a file, open it and read it into python in whatever way makes you happy. In this case you might want something like the readlines() function that is a sort of list of individual lines.
  • If not all such lines should be excluded, find a way to remove any you do not want before continuing.
  • As it happens, what you are showing is in a sense easy to sort. If you skip the first (zeroeth) character with a “[” and keep the next characters before the comma, you have entries like 2024-08-19 10:25:26 that can be sorted alphabetically. You do not need to convert to dates of some kind.
  • So how do you sort this. There are many ways. It depends on your current programming level and other wishes. I will discuss a bit more below.
  • Once your data is sorted, you can extract the info you want (see below) and either display it to the user or save it into perhaps another file.

One of many methods people might use is to take your list of lines and extract a second list containing just the dates as described above. The result can be combined into a sort of 2-column data structure, perhaps a numpy/pandas object such as a dataframe and then you can sort on the alphabetic date column which also sorts the original text. You then write out a result.

You can also do a sort using a function that takes an argument of a second function (or maybe just an in-line lambda) that compares two items by comparing the substring we have been talking about and that would store the list in-place.

Perhaps an unusual way would work for you here given that all the lines start with a ‘[’ which means you can just sort the darn lines in the first place alphabetically. If the beginning was variable, such as the name of a day of the week, the task might require using regular expressions to find and extract the date and proceed with some method as above.

So, back to the point, it looks like

  • open the file
  • readlines
  • sort it
  • write it out

Here is an example of how simple it can be with a modified sample of your data where I scrambled some lines to be out of order:

# Lines already read in from file
lines_in = [
  ["2024-08-19 10:25:38,749] - <MSG>[ID:01417437]==>Calling service argFlexibusJMSPosting asynchronously, timeout=0</MSG>"],
  ["2024-08-19 10:25:38,742] - <MSG>[ID:01417437]==>Request Message received from Binding: argCosmosAsync_forIncomingPaymentConsumer</MSG>"],
  ["2024-08-19 10:25:26,426] - <MSG>[ID:17449859]==>Request Message received from Binding: argCoelsaCashout</MSG>"],
  ["2024-08-19 10:25:38,743] - <MSG>[ID:01417437]==>[App:app-arg-cosmos-async_for-incoming-payment][TxnType:{1}] received transaction</MSG>"],
  ["2024-08-19 10:25:38,745] - <MSG>[ID:01417437]==>Debug: Action Code=  {2} {3} {4} {5}</MSG>"]
]

lines_out = sorted(lines_in)

# Lines need to be displayed or written out to file

Here is a display of the result of a list of sorted lines:

>>> import pprint
>>> pprint.pprint(lines_out)
[['2024-08-19 10:25:26,426] - <MSG>[ID:17449859]==>Request Message received '
  'from Binding: argCoelsaCashout</MSG>'],
 ['2024-08-19 10:25:38,742] - <MSG>[ID:01417437]==>Request Message received '
  'from Binding: argCosmosAsync_forIncomingPaymentConsumer</MSG>'],
 ['2024-08-19 10:25:38,743] - '
  '<MSG>[ID:01417437]==>[App:app-arg-cosmos-async_for-incoming-payment][TxnType:{1}] '
  'received transaction</MSG>'],
 ['2024-08-19 10:25:38,745] - <MSG>[ID:01417437]==>Debug: Action Code=  {2} '
  '{3} {4} {5}</MSG>'],
 ['2024-08-19 10:25:38,749] - <MSG>[ID:01417437]==>Calling service '
  'argFlexibusJMSPosting asynchronously, timeout=0</MSG>']]

Hi Avi,
Thanks a lot for your help!

With respect to:

  • Is the file already in existence or is the data still in your current python program?
    the files is generated by python script and i need to fix it.

So, the best choice is this?

  • open the file
  • readlines
  • sort it
  • write it out

regards