/ / प्रासंगिक क्षेत्रों के लिए पार्सिंग फ़ाइल - regex, bash, perl, पैटर्न-मिलान, मिलान

प्रासंगिक फ़ील्ड के लिए पार्सिंग फ़ाइल - रेगेक्स, बैश, पर्ल, पैटर्न-मिलान, मैच

फ़ाइल पर एक नियमित अभिव्यक्ति का उपयोग कैसे किया जा सकता है:

A7247, partOf:["LTA_SO", "dontact"]
alat, partOf:["WTP_ZR"]
yello, partOf:[]

और वापस आ जाओ (नोटिस कुछ भी नहीं है):

A7247:LTA_SO,dontact
alat:WTP_ZR
yello:

धन्यवाद!

उत्तर:

जवाब के लिए 0 № 1

दाएं हाथ की ओर (भाग के बाद भाग :) जेएसओएन की तरह दिखता है। यदि यह सच है, तो इसका इलाज करना बेहतर होगा:

use strict;
use warnings;
use JSON::XS;

while (<DATA>) {
chomp;
my ($lhs, $rhs) = split(/:/, $_, 2);
my $array_ref = decode_json($rhs);

$lhs = (split(/,/, $lhs))[0];
$rhs = join(",", @$array_ref);

print join(":", $lhs, $rhs), "n";
}

__DATA__
A7247, partOf:["LTA_SO", "dontact"]
alat, partOf:["WTP_ZR"]
yello, partOf:[]

आउटपुट:

A7247:LTA_SO,dontact
alat:WTP_ZR
yello:

उत्तर № 2 के लिए -1

का उपयोग करते हुए FPAT में gnu awk आप आपूर्ति किए गए regex का उपयोग कर क्षेत्र विभाजित कर सकते हैं:

awk -v FPAT=""[^"]*"|[^, :"]+," "{
s=d=""
for (i=1; i<=NF; i++) {
gsub(/^"|[",]$/, "", $i)
s = s d $i
d = (d == "" ? ":" : ",")
}
print s (i==2?d:"")
}" file

आउटपुट:

A7247:LTA_SO,dontact
alat:WTP_ZR
yello: