1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| awk -v separator="${2:-,}" '
{
re="=[^ ]+=[^ ]+"
if($0 ~ re)
{
b=split($0,regular,re,oops);
$0="";
for(i=1;i<b;i++) {
oops[i]=substr(oops[i],2);
gsub("=","%%%%",oops[i]);
$0=$0 regular[i]
if(oops[i]) $0=$0 "=" oops[i];
}
if(regular[b]) $0=$0 regular[b]
}
re="=\"[^\"]*=[^\"]*\""
if($0 ~ re)
{
b=split($0,regular,re,oops);
$0="";
for(i=1;i<=b;i++) {
oops[i]=substr(oops[i],2);
gsub("=","%%%%",oops[i]);
$0=$0 regular[i]
if(oops[i]) $0=$0 "=" oops[i];
}
}
{
columns=split($0,value,"[a-zA-Z0-9_-]+=",label);
for(i=1;i<columns;i++)
{
sub("=$","",label[i]);
sub("[\"]?[ \r]?$","",value[i+1]);
sub("^\"","",value[i+1]);
re=sprintf(".*%s.*",separator);
sub(re,"\"&\"",value[i+1]);
if(NR==1) {
printf("%s%s",label[i],i==columns-1?"":",");
c[i]=label[i];
}
gsub("%%%%","=",value[i+1]);
v[label[i]]=value[i+1];
}
if(NR==1) { nc=columns; printf("\n"); }
for(i=1;i<nc;i++)
{
printf("%s%s",v[c[i]],i==nc-1?"":separator);
v[c[i]]="?";
}
printf("\n");
}
}
' ${1:-test.log} |