#!/usr/bin/perl -w

#TODO add f and F options

use strict;
use Getopt::Std;
use File::Basename;
use File::Path;

use vars qw/$opt_p $opt_d $opt_m/;

getopts("p:d:m");

my $prefix = $opt_p || '';
my $file_delim = $opt_d || ':';
my $mkpath = $opt_m || ':';

my @fields = map {$_>0 ? $_-1 : $_} @ARGV;

unless (@fields) {
	die "syntax: $0 [-p prefix] [-d file_delim] [-m] fields...\n-m  mkpath\n";
}

my @F;
my @slice;
my $slice;
my $last_slice = '';

my @rsf = reverse sort @fields;

while (defined ($_=<STDIN>)) {
	chomp;
	@F = split /\t/, $_, -1;

	@slice = @F[@fields];
	$slice = join "\t", @slice;

	if ($slice ne $last_slice) {
		my $file = "$prefix".join $file_delim, @slice;
		$opt_m && mkpath dirname($file);
		open FILE, ">$file";
	}

	for (@rsf) { splice @F, $_, 1 }

	print FILE (join "\t", @F), "\n";

	$last_slice = $slice;
}
