Как извлечь данные из файла журнала приложения в CSV-файл - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть файл application.log в этом разделе ниже

2020-04-14 01:04:06 INFO  app-proxy:53 - Params : {"file_list":["USER_INFO_1234567.tar.md5"],"conn_id":"6adfda","Token":"vishal.kg","proxy_name":"India-Noida","hash":"sdadjsasdkj"}
2020-04-14 01:24:44 INFO  app-proxy:53 - Params : {"file_list":["ATT_SAMPLE_TERT.tar.md5"],"conn_id":"adfdsfed","Token":"venkat.raj","proxy_name":"India-Noida","hash":"qieuadsjkasdjk"}
2020-04-14 03:16:06 INFO  app-proxy:53 - Params : {"file_list":["KER_SAMPLE_TERT.tar.md5"],"conn_id":"kajdfldk","Token":"ankit.ys","proxy_name":"India-Noida","hash":"asdkfjds"}
2020-04-14 03:18:15 INFO  app-proxy:53 - Params : {"file_list":["DU_SAMPLE_TERT.tgz"],"conn_id":"u9sdf7ds9","Token":"shitha.a","proxy_name":"India-Noida","hash":"wqeirdasjk"}
2020-04-14 04:30:02 INFO  app-proxy:53 - Params : {"file_list":["MBU_SAMAPLE.tar.md5"],"conn_id":"a8df7dsd","Token":"karthi.v","proxy_name":"India-Noida","hash":"odisfdjda"}
2020-04-14 05:22:06 INFO  app-proxy:53 - Params : {"file_list":["PCL_SAMPLE-15637481.tar.md5"],"conn_id":"8adf8das","Token":"b.venkat","proxy_name":"India-Noida","hash":"adfjkds"}

Я пытаюсь найти раздел Params :, и из этого мне нужно извлечь Date, Time, file_list, Token, proxy_name в csv файл.

Тогда у меня есть еще один user-session.log файл, и он содержит ниже.

2020-04-14 01:04:07 REMOTE_START null null USER_INFO_1234567.tar.md5 0 0/0
2020-04-14 01:15:18 REMOTE_END null null USER_INFO_1234567.tar.md5 672 7219067/7209967

2020-04-14 01:24:45 REMOTE_START null null ATT_SAMPLE_TERT.tar.md5 0 0/0
2020-04-14 01:34:12 REMOTE_END null null ATT_SAMPLE_TERT.tar.md5 568 52401769/50176769

2020-04-14 03:16:08 REMOTE_START null null KER_SAMPLE_TERT.tar.md5 0 0/0
2020-04-14 03:16:22 REMOTE_END null null KER_SAMPLE_TERT.tar.md5 16 1059346/70840514

2020-04-14 03:18:17 REMOTE_START null null DU_SAMPLE_TERT.tgz 0 0/0
2020-04-14 03:18:18 REMOTE_END null null DU_SAMPLE_TERT.tgz 2 949685/949685

2020-04-14 04:30:04 REMOTE_START null null MBU_SAMAPLE.tar.md55 0 0/0
2020-04-14 04:30:05 REMOTE_END null null MBU_SAMAPLE.tar.md5 2 2857069/2857069

2020-04-14 05:22:12 REMOTE_START null  PCL_SAMPLE-15637481.tar.md5 0 0/0
2020-04-14 05:22:15 REMOTE_END null null PCL_SAMPLE-15637481.tar.md5 9 93829204/93829204

Из этого REMOTE_START & REMOTE_END содержатся данные для каждого пользователя. Мне нужно извлечь то же самое вместе с выше csv файл. требуемый вывод требуется согласно скриншоту ниже.

enter image description here Любое направление будет очень полезным.

1 Ответ

3 голосов
/ 15 апреля 2020

РЕДАКТИРОВАТЬ: Так как OP изменил образец данных Input_file (s), поэтому добавление решения, как сейчас.

awk '
FNR==NR{
  match($0,/{"file_list":\["[^"]*/)
  userData=substr($0,RSTART,RLENGTH)
  sub(/{"file_list":\["/,"",userData)
  match($0,/"Token":"[^"]*/)
  tokenVal=substr($0,RSTART,RLENGTH)
  sub(/.*"/,"",tokenVal)
  match($0,/"proxy_name":"[^"]*/)
  proxyName=substr($0,RSTART,RLENGTH)
  sub(/.*"/,"",proxyName)
  arrayId[userData]=$1 OFS $2 OFS userData OFS tokenVal OFS proxyName
  next
}
!firstOccur[$6]++{
  firstOccurVal[$6]=$2
}
($6 in arrayId){
  Output[$6]=arrayId[$6] OFS firstOccurVal[$6] OFS $2
}
END{
  for(key in Output){
    print Output[key]
  }
}' application.log user-session.log

Также добавьте | column -t к выше код, если вы хотите, чтобы вывод в приятном виде.



Не могли бы вы попробовать следующее.

awk '
match($0,/USERDATA_TMB_[^"]*/){
  userd=substr($0,RSTART,RLENGTH)
  split(userd,array,"_")
  val=array[3]
}
FNR==NR{
  match($0,/"Token":"[^"]*/)
  tVal=substr($0,RSTART,RLENGTH)
  sub(/.*"/,"",tVal)
  match($0,/"proxy_name":"[^"]*/)
  pname=substr($0,RSTART,RLENGTH)
  sub(/.*"/,"",pname)
  arrayId[val]=$1 OFS $2 OFS userd OFS tVal OFS pname
  next
}
!firstOccur[val]++{
  firstOccurVal[val]=$2
}
(val in arrayId){
  Output[val]=arrayId[val] OFS firstOccurVal[val] OFS $2
}
END{
  for(key in Output){
    print Output[key]
  }
}
' application.log user-session.log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...