извлечь данные в формате CSV - PullRequest
0 голосов
/ 05 октября 2018

У меня есть файл: file.txt с данными:

24/9/2018 15:35:19.380 B63201C<br>
24/9/2018 15:35:22.350 ES0101C(hour_start)<br>
24/9/2018 15:36:13.231 Execute service next : 0003<br>
24/9/2018 15:38:13.664 Result of the execution 0003 Result: 0003<br>
24/9/2018 15:39:10.664 Executing the transaction PE20<br>
24/9/2018 15:35:26.773 ES0101C(hour_end)<br>
24/9/2018 15:36:12.164 B63201C<br>
- 1 bloque -<br>
24/9/2018 17:16:17.428 B63201C<br>
24/9/2018 17:16:29.031 ES0101C(hour_start)<br>
24/9/2018 17:16:13.231 Execute service next : 0003<br>
24/9/2018 17:18:13.664 Result of the execution 0003 Result: 0003<br>
24/9/2018 17:19:10.664 Executing the transaction BE15<br>
24/9/2018 17:25:26.773 ES0101C(hour_end)<br>
24/9/2018 17:26:12.164 B63201C<br>
- 2 bloque -<br>

Мне нужно извлечь данные в формате CSV с помощью следующих полей:

дата,hour_start, hour_end, B63201C-ES0101C, транзакция

Другими словами, полученные данные будут:

> 24/9/2018,15:35:22.350,15:35:26.773,B63201C-ES0101C,PE20
> 24/9/2018,17:16:29.031,17:25:26.773,B63201C-ES0101C,BE15

Любой способ сделать это в Bash или с помощью AwK?

1 Ответ

0 голосов
/ 05 октября 2018
#!awk -f
/Executing the transaction / {
  sub("<br>","")
  transaction=$NF
}
/\(hour_start\)/ {
  date=$1
  hour_start=$2
  id1=prev
}
/\(hour_end\)/ {
  hour_end=$2
  split($3,a,"(")
  id2=a[1]
  printf "%s,%s,%s,%s-%s,%s\n", date, hour_start, hour_end, id1, id2, transaction
}
{
  sub("<br>","")
  prev=$3
}

Пример с кодом в исполняемом файле с именем script и вашим примером ввода в input:

$ ./script input
24/9/2018,15:35:22.350,15:35:26.773,B63201C-ES0101C,PE20
24/9/2018,17:16:29.031,17:25:26.773,B63201C-ES0101C,BE15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...