|
Packit Service |
f629e6 |
BEGIN {
|
|
Packit Service |
f629e6 |
split("c: ::ab+", fs_arr, ":")
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
for (i = 1; i in fs_arr; ++i) {
|
|
Packit Service |
f629e6 |
split($0, a, fs_arr[i], seps)
|
|
Packit Service |
f629e6 |
print zipcat(a, seps)
|
|
Packit Service |
f629e6 |
dump_array(seps)
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
END {
|
|
Packit Service |
f629e6 |
seps[1] = "123"; seps[5] = 10
|
|
Packit Service |
f629e6 |
for (i = 1; i in fs_arr; ++i) {
|
|
Packit Service |
f629e6 |
split("", a, fs_arr[i], seps)
|
|
Packit Service |
f629e6 |
dump_array(seps)
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
function dump_array(a, i, mini, maxi)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
mini = minidx(a) + 0
|
|
Packit Service |
f629e6 |
maxi = maxidx(a) + 0
|
|
Packit Service |
f629e6 |
printf "{"
|
|
Packit Service |
f629e6 |
for (i = mini; i <= maxi; ++i)
|
|
Packit Service |
f629e6 |
if (i in a) {
|
|
Packit Service |
f629e6 |
if (i > mini)
|
|
Packit Service |
f629e6 |
printf ", "
|
|
Packit Service |
f629e6 |
printf "%d => \"%s\"", i, a[i]
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
printf "}\n"
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
function zipcat(a, b, c)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
zip(a, b, c)
|
|
Packit Service |
f629e6 |
return cat(c)
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function cat(a, mini, maxi, i, s)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
mini = minidx(a) + 0
|
|
Packit Service |
f629e6 |
maxi = maxidx(a) + 0
|
|
Packit Service |
f629e6 |
for (i = mini; i <= maxi; ++i)
|
|
Packit Service |
f629e6 |
if (i in a)
|
|
Packit Service |
f629e6 |
s = s a[i]
|
|
Packit Service |
f629e6 |
return s
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function zip(a, b, c, mini, maxi, i)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
del(c)
|
|
Packit Service |
f629e6 |
mini = minidx2(a, b) + 0
|
|
Packit Service |
f629e6 |
maxi = maxidx2(a, b) + 0
|
|
Packit Service |
f629e6 |
for (i = mini; i <= maxi; ++i) {
|
|
Packit Service |
f629e6 |
if (i in a)
|
|
Packit Service |
f629e6 |
c[i] = a[i]
|
|
Packit Service |
f629e6 |
if (i in b)
|
|
Packit Service |
f629e6 |
c[i] = c[i] b[i]
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function maxidx2(a, b)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
if (emptyarr(a))
|
|
Packit Service |
f629e6 |
return maxidx(b)
|
|
Packit Service |
f629e6 |
else if (emptyarr(b))
|
|
Packit Service |
f629e6 |
return maxidx(a)
|
|
Packit Service |
f629e6 |
else
|
|
Packit Service |
f629e6 |
return max(maxidx(a), maxidx(b))
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function minidx2(a, b)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
if (emptyarr(a))
|
|
Packit Service |
f629e6 |
return minidx(b)
|
|
Packit Service |
f629e6 |
else if (emptyarr(b))
|
|
Packit Service |
f629e6 |
return minidx(a)
|
|
Packit Service |
f629e6 |
else
|
|
Packit Service |
f629e6 |
return min(minidx(a), minidx(b))
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function maxidx(a, i, m)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
if (emptyarr(a))
|
|
Packit Service |
f629e6 |
m = ""
|
|
Packit Service |
f629e6 |
else {
|
|
Packit Service |
f629e6 |
m = choose(a) + 0
|
|
Packit Service |
f629e6 |
for (i in a) {
|
|
Packit Service |
f629e6 |
i += 0
|
|
Packit Service |
f629e6 |
if (i > m)
|
|
Packit Service |
f629e6 |
m = i
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
return m
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function minidx(a, i, m)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
if (emptyarr(a))
|
|
Packit Service |
f629e6 |
m = ""
|
|
Packit Service |
f629e6 |
else {
|
|
Packit Service |
f629e6 |
m = choose(a) + 0
|
|
Packit Service |
f629e6 |
for (i in a) {
|
|
Packit Service |
f629e6 |
i += 0
|
|
Packit Service |
f629e6 |
if (i < m)
|
|
Packit Service |
f629e6 |
m = i
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
return m
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function choose(a, m)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
for (m in a)
|
|
Packit Service |
f629e6 |
return m
|
|
Packit Service |
f629e6 |
return ""
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function emptyarr(a, k)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
for (k in a)
|
|
Packit Service |
f629e6 |
return 0
|
|
Packit Service |
f629e6 |
return 1
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
# portable delete
|
|
Packit Service |
f629e6 |
function del(a)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
split("", a)
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function max(x, y)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
return x > y ? x : y
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function min(x, y)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
return x < y ? x : y
|
|
Packit Service |
f629e6 |
}
|