Blame test/splitarg4.awk

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
}