2017-06-14 57 views
-2

示例日誌內的日誌文件中的特定的字符串,如何讀取從perl腳本

2016年3月29日10點57分28秒642 UTC [31871] INFO節點信息: {「數據中心」 :「TEST-DC」,「infraType」:「saas」,「service」:「fusion」, 「extraInfo」:{「systemType」:「secondary-ha1」,「tenantType」:「sales」, 「tenantName 「: 「sale1」}

我想讀 「tenantName」: 「sale1」 和最後一個字符串我需要的是 「sale1」

試着用AWK和削減Perl腳本內,但並沒有制定出任何建議和/或暗示將很可觀

我得到的答案的解決方案,從@Sobrique

使用的模塊JSON &名單:: MoreUtils

find(\&Count, $logDir); 

my @uniqtotal = uniq @totCount; 
$totalcount = @uniqtotal; 

sub Count { 
    if($File::Find::name =~m!$logDir/(.*?)/$pattern! and -f $File::Find::name) { 
    my $jsonLine = `grep 'tenantName' $File::Find::name`; 
    if ($jsonLine ne "") { 
     $jsonLine =~ m/(\{.*\})/ ; 
     my $json_text = $1; 
     my $json = decode_json ($json_text); 
     push @totCount, $json -> {extraInfo} -> {tenantName}; 
    } 
    } 
} 
+1

建議:請出示你嘗試過什麼。 (編輯問題以添加您的代碼。) – zdim

回答

1

不管awk和sed在perl腳本里面。

這是JSON,所以最好解析爲JSON。

#!/usr/bin/env perl 

use strict; 
use warnings; 

use JSON; 

while (<>) { 
    my ($json_text) = m/(\{.*\})/; 
    my $json = decode_json ($json_text); 
    print $json -> {extraInfo} -> {tenantName}; 
} 

或者簡化到一個襯墊,因爲這是hoopy事做:

perl -MJSON -ne 'print decode_json (/(\{.*\})/ && $1)->{extraInfo}{tenantName}' 
+0

謝謝你的建議 – akbharath

0

sed

sed -r 's/.*"tenantName": "([^"]+).*/\1/g' inputfile 
sale1 

Exaplanation: grep-o標誌將只打印字符串的匹配部分而不是整行。 -P標誌將啓用perl正則表達式爲grep\K:手段忘記了左邊的所有內容。

+1

謝謝@PS。它工作完美,我的壞不考慮grep或sed較早 – akbharath