Blame test/splitarg4.awk

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