var cut = function (stdin) {
  var args = Array.prototype.slice.call(arguments, 1), match, range, sep;
  for (var i = 0; i < args.length; ++i) {
    var arg = args[i];

    if (i + 1 != args.length && args[i + 1].indexOf('-') != 0) {
      arg += args[i + 1];
    }

    if (match = arg.match(/^(--fields=|-f)(.*)/)) {
      range = match[2];
      sep = sep || ' ';
    } else if (match = arg.match(/^(--characters=|-c)(.*)/)) {
      range = match[2];
      sep = '';
    } else if (match = arg.match(/^(--delimiter=|-d)(.*)/)) {
      sep = match[2];
    } else if (arg) {
      //files.push(arg);
    }
  }
  return cut.select(stdin, range, sep);
};

cut.select = function (stdin, range, sep) {
  if (match = range.match(/^(\d+)$/)) {
    return cut.map(stdin, function (line) {
      return line.split(sep)[parseInt(match, 10) - 1];
    });
  } else if (match = range.match(/^(\d+)(,\d+)*$/)) {
    
  } else if (match = range.match(/^(\d+)-$/)) {
    return cut.map(stdin, function (line) {
      return line.split(sep).slice(parseInt(match[1], 10) - 1).join(sep);
    });
  } else if (match = range.match(/^(\d+)-(\d+)$/)) {
    return cut.map(stdin, function (line) {
      return line.split(sep).slice(parseInt(match[1], 10) - 1, parseInt(match[2], 10)).join(sep);
    });
  }
  return stdin;
};

cut.map = function (stdin, callback, self) {
  var stdout = [];
  for (var i = 0; i < stdin.length; ++i) {
    stdout[i] = callback.call(self, stdin[i], i, stdin);
  }
  return stdout;
};

