/ / Plik parsujący dla odpowiednich pól - regex, bash, perl, dopasowanie do wzorca, dopasowanie

Parsowanie pliku dla odpowiednich pól - regex, bash, perl, dopasowywanie wzorców, dopasowanie

Jak można zastosować wyrażenie regularne w pliku z:

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

I wróć (zauważ, że nie należysz do niczego):

A7247:LTA_SO,dontact
alat:WTP_ZR
yello:

Dzięki!

Odpowiedzi:

0 dla odpowiedzi № 1

Prawa strona (część po :) wygląda jak JSON. Jeśli to prawda, lepiej traktować to w ten sposób:

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:[]

Wydajność:

A7247:LTA_SO,dontact
alat:WTP_ZR
yello:

-1 dla odpowiedzi № 2

Za pomocą FPAT w gnu awk możesz podzielić pole używając dostarczonego wyrażenia regularnego:

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

Wydajność:

A7247:LTA_SO,dontact
alat:WTP_ZR
yello: