parallel: --group-by initial version. Documentation missing.

This commit is contained in:
Ole Tange 2019-05-04 23:00:25 +02:00
parent 32318fca9c
commit 818439c3ff
3 changed files with 743 additions and 6 deletions

View file

@ -53,9 +53,9 @@ sub set_input_source_header($$) {
for my $s (split /$delimiter/o, $line) { for my $s (split /$delimiter/o, $line) {
::debug("init", "Colname: '$s'"); ::debug("init", "Colname: '$s'");
# Replace {colname} with {2} # Replace {colname} with {2}
for(@$command_ref,@Global::ret_files,@Global::transfer_files, for(@$command_ref, @Global::ret_files,
$opt::tagstring, $opt::workdir, $opt::results, @Global::transfer_files, $opt::tagstring,
$opt::retries) { $opt::workdir, $opt::results, $opt::retries) {
# Skip if undefined # Skip if undefined
$_ or next; $_ or next;
s:\{$s(|/|//|\.|/\.)\}:\{$id$1\}:g; s:\{$s(|/|//|\.|/\.)\}:\{$id$1\}:g;
@ -480,10 +480,13 @@ sub find_header($$) {
# Uses: # Uses:
# $opt::header # $opt::header
# $Global::blocksize # $Global::blocksize
# $Global::header
# Returns: # Returns:
# $header string # $header string
my ($buf_ref, $fh) = @_; my ($buf_ref, $fh) = @_;
my $header = ""; my $header = "";
# $Global::header may be set in group_by_loop()
if($Global::header) { return $Global::header }
if($opt::header) { if($opt::header) {
if($opt::header eq ":") { $opt::header = "(.*\n)"; } if($opt::header eq ":") { $opt::header = "(.*\n)"; }
# Number = number of lines # Number = number of lines
@ -597,6 +600,88 @@ sub cat_partial($@) {
" perl -e '$script' @start_len |"; " perl -e '$script' @start_len |";
} }
sub group_by_loop($) {
# Generate perl code for group-by loop
# Insert a $recsep when the column value changes
# The column value can be computed with $perexpr
my($recsep) = @_;
my $groupby = $opt::groupby;
my ($col,$perlexpr);
if($groupby =~ /^[a-z0-9_]+(\s|$)/i) {
# Column name/number (possibly prefix)
if($groupby =~ s/^(\d+)\s*//) {
# Column number (possibly prefix)
$col = $1-1;
} elsif($groupby =~ s/^([a-z0-9_]+)\s*//) {
# Column name (possibly prefix)
my $colname = $1;
my($read,$char,@line,$header);
# A full line, but nothing more (the rest must be read by the child)
do {
$read = sysread(STDIN,$char,1);
push @line, $char;
} while($read and $char ne "\n");
# $Global::header used to prepend block to each job
$Global::header = join "", @line;
# Split on --copsep pattern
my @headers = split/$opt::colsep/, $Global::header;
my %headers;
# Numbered 0..n-1 due to being used by $F[n]
@headers{@headers} = (0..$#headers);
$col = $headers{$colname};
if(not defined $col) {
::error("Column '$colname' $opt::colsep not found in header",keys %headers);
::wait_and_exit(255);
}
}
}
# What is left of $groupby is $perlexpr
$perlexpr = $groupby;
my $loop = ::spacefree(0,'{
local $_=COLVALUE;
PERLEXPR;
if(! defined $last) { $last = $_ }
if(($last) ne $_) {
print "RECSEP";
$last = $_;
}
}');
if(defined $col) {
$loop =~ s/COLVALUE/\$F[$col]/g;
} else {
$loop =~ s/COLVALUE/\$_/g;
}
$loop =~ s/PERLEXPR/$perlexpr/g;
$loop =~ s/RECSEP/$recsep/g;
return $loop;
}
sub group_by_stdin_filter() {
# Record separator with 119 bit random value
$opt::recend = '';
$opt::recstart =
join "", map { (0..9,"a".."z","A".."Z")[rand(62)] } (1..20);
$opt::remove_rec_sep = 1;
my @filter;
push @filter, "perl";
if($opt::groupby =~ /^[a-z0-9_]+(\s|$)/i) {
# This is column number/name
# Use -a (auto-split)
push @filter, "-a";
$opt::colsep ||= "\t";
my $sep = $opt::colsep;
$sep =~ s/\t/\\t/g;
$sep =~ s/\"/\\"/g;
push @filter, "-F$sep";
}
push @filter, "-pe";
push @filter, group_by_loop($opt::recstart);
::debug("init", "@filter\n");
open(STDIN, '-|', @filter) || die ("Cannot start @filter");
}
sub spreadstdin() { sub spreadstdin() {
# read a record # read a record
# Spawn a job and print the record to it. # Spawn a job and print the record to it.
@ -1259,6 +1344,7 @@ sub options_hash() {
"pipepart|pipe-part" => \$opt::pipepart, "pipepart|pipe-part" => \$opt::pipepart,
"tee" => \$opt::tee, "tee" => \$opt::tee,
"shard=s" => \$opt::shard, "shard=s" => \$opt::shard,
"groupby|group-by=s" => \$opt::groupby,
"hgrp|hostgrp|hostgroup|hostgroups" => \$opt::hostgroups, "hgrp|hostgrp|hostgroup|hostgroups" => \$opt::hostgroups,
"embed" => \$opt::embed, "embed" => \$opt::embed,
); );
@ -1705,11 +1791,34 @@ sub check_invalid_option_combinations() {
"--noctrlc has been retired."); "--noctrlc has been retired.");
::wait_and_exit(255); ::wait_and_exit(255);
} }
if($opt::groupby) {
if(not $opt::pipe) {
$opt::pipe = 1;
}
if($opt::remove_rec_sep) {
::error("--remove-rec-sep is not compatible with --groupby");
::wait_and_exit(255);
}
if($opt::recstart) {
::error("--recstart is not compatible with --groupby");
::wait_and_exit(255);
}
if($opt::recend ne "\n") {
::error("--recend is not compatible with --groupby");
::wait_and_exit(255);
}
if($opt::pipepart) {
# TODO This may be possible to do later
# Finding split points might be a bitch though
::error("--pipepart is not compatible with --groupby");
::wait_and_exit(255);
}
}
} }
sub init_globals() { sub init_globals() {
# Defaults: # Defaults:
$Global::version = 20190422; $Global::version = 20190504;
$Global::progname = 'parallel'; $Global::progname = 'parallel';
$Global::infinity = 2**31; $Global::infinity = 2**31;
$Global::debug = 0; $Global::debug = 0;
@ -10811,7 +10920,7 @@ sub get($) {
$self->{'len'}, $self->{'len'},
); );
$cmd_line->populate(); $cmd_line->populate();
::debug("init","cmd_line->number_of_args ", ::debug("run","cmd_line->number_of_args ",
$cmd_line->number_of_args(), "\n"); $cmd_line->number_of_args(), "\n");
if(not $Global::no_more_input and ($opt::pipe or $opt::pipepart)) { if(not $Global::no_more_input and ($opt::pipe or $opt::pipepart)) {
if($cmd_line->replaced() eq "") { if($cmd_line->replaced() eq "") {
@ -12449,6 +12558,9 @@ sub main() {
pipe_shard_setup(); pipe_shard_setup();
} }
if($opt::groupby) {
group_by_stdin_filter();
}
if($opt::eta or $opt::bar or $opt::shuf or $Global::halt_pct) { if($opt::eta or $opt::bar or $opt::shuf or $Global::halt_pct) {
# Count the number of jobs or shuffle all jobs # Count the number of jobs or shuffle all jobs
# before starting any. # before starting any.

View file

@ -312,6 +312,79 @@ par_lb_mem_usage() {
memusage 100000 parallel --lb ::: 'long_line; long_line' memusage 100000 parallel --lb ::: 'long_line; long_line'
} }
par_groupby() {
tsv() {
printf "%s\t" a1 b1 c1; echo
printf "%s\t" 2 2 2; echo
printf "%s\t" 3 2 2; echo
printf "%s\t" 3 3 2; echo
printf "%s\t" 3 2 4; echo
printf "%s\t" 3 2 2; echo
printf "%s\t" 3 2 3; echo
}
export -f tsv
ssv() {
# space separated
printf "%s\t" a1 b1 c1; echo
printf "%s " 2 2 2; echo
printf "%s \t" 3 2 2; echo
printf "%s\t " 3 3 2; echo
printf "%s " 3 2 4; echo
printf "%s\t\t" 3 2 2; echo
printf "%s\t \t" 3 2 3; echo
}
export -f ssv
cssv() {
# , + space separated
printf "%s,\t" a1 b1 c1; echo
printf "%s ," 2 2 2; echo
printf "%s ,\t" 3 2 2; echo
printf "%s\t, " 3 3 2; echo
printf "%s,," 3 2 4; echo
printf "%s\t,,, " 3 2 2; echo
printf "%s\t" 3 2 3; echo
}
export -f cssv
csv() {
# , separated
printf "%s," a1 b1 c1; echo
printf "%s," 2 2 2; echo
printf "%s," 3 2 2; echo
printf "%s," 3 3 2; echo
printf "%s," 3 2 4; echo
printf "%s," 3 2 2; echo
printf "%s," 3 2 3; echo
}
export -f csv
tester() {
block="$1"
groupby="$2"
generator="$3"
colsep="$4"
echo "### test $generator | --colsep $colsep --groupby $groupby $block"
$generator |
parallel --pipe --colsep "$colsep" --groupby "$groupby" -k $block 'echo NewRec; cat'
}
export -f tester
parallel --tag -k tester \
::: -N1 '--block 20' \
::: '3 $_%=2' 3 's/^(.).*/$1/' c1 'c1 $_%=2' \
::: tsv ssv cssv csv \
:::+ '\t' '\s+' '[\s,]+' ',' \
# Test --colsep char
# Test --colsep pattern
# Test --colsep -N1
# Test --colsep --block 20
# Test --groupby col
# Test --groupby 'col perl'
# Test space sep --colsep '\s'
# Test --colsep --header :
}
export -f $(compgen -A function | grep par_) export -f $(compgen -A function | grep par_)
compgen -A function | grep par_ | LC_ALL=C sort | compgen -A function | grep par_ | LC_ALL=C sort |

View file

@ -47,6 +47,558 @@ par_dryrun_timeout_ungroup 1000 2000 8893
par_exitval_signal ### Test --joblog with exitval and Test --joblog with signal -- timing dependent par_exitval_signal ### Test --joblog with exitval and Test --joblog with signal -- timing dependent
par_exitval_signal exitval=128+6 OK par_exitval_signal exitval=128+6 OK
par_exitval_signal signal OK par_exitval_signal signal OK
par_groupby -N1 3 $_%=2 tsv \t ### test tsv | --colsep \t --groupby 3 $_%=2 -N1
par_groupby -N1 3 $_%=2 tsv \t NewRec
par_groupby -N1 3 $_%=2 tsv \t a1 b1 c1
par_groupby -N1 3 $_%=2 tsv \t 2 2 2
par_groupby -N1 3 $_%=2 tsv \t 3 2 2
par_groupby -N1 3 $_%=2 tsv \t 3 3 2
par_groupby -N1 3 $_%=2 tsv \t 3 2 4
par_groupby -N1 3 $_%=2 tsv \t 3 2 2
par_groupby -N1 3 $_%=2 tsv \t NewRec
par_groupby -N1 3 $_%=2 tsv \t 3 2 3
par_groupby -N1 3 $_%=2 ssv \s+ ### test ssv | --colsep \s+ --groupby 3 $_%=2 -N1
par_groupby -N1 3 $_%=2 ssv \s+ NewRec
par_groupby -N1 3 $_%=2 ssv \s+ a1 b1 c1
par_groupby -N1 3 $_%=2 ssv \s+ 2 2 2
par_groupby -N1 3 $_%=2 ssv \s+ 3 2 2
par_groupby -N1 3 $_%=2 ssv \s+ 3 3 2
par_groupby -N1 3 $_%=2 ssv \s+ 3 2 4
par_groupby -N1 3 $_%=2 ssv \s+ 3 2 2
par_groupby -N1 3 $_%=2 ssv \s+ NewRec
par_groupby -N1 3 $_%=2 ssv \s+ 3 2 3
par_groupby -N1 3 $_%=2 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby 3 $_%=2 -N1
par_groupby -N1 3 $_%=2 cssv [\s,]+ NewRec
par_groupby -N1 3 $_%=2 cssv [\s,]+ a1, b1, c1,
par_groupby -N1 3 $_%=2 cssv [\s,]+ 2 ,2 ,2 ,
par_groupby -N1 3 $_%=2 cssv [\s,]+ 3 , 2 , 2 ,
par_groupby -N1 3 $_%=2 cssv [\s,]+ 3 , 3 , 2 ,
par_groupby -N1 3 $_%=2 cssv [\s,]+ 3,,2,,4,,
par_groupby -N1 3 $_%=2 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,,
par_groupby -N1 3 $_%=2 cssv [\s,]+ NewRec
par_groupby -N1 3 $_%=2 cssv [\s,]+ 3 2 3
par_groupby -N1 3 $_%=2 csv , ### test csv | --colsep , --groupby 3 $_%=2 -N1
par_groupby -N1 3 $_%=2 csv , NewRec
par_groupby -N1 3 $_%=2 csv , a1,b1,c1,
par_groupby -N1 3 $_%=2 csv , 2,2,2,
par_groupby -N1 3 $_%=2 csv , 3,2,2,
par_groupby -N1 3 $_%=2 csv , 3,3,2,
par_groupby -N1 3 $_%=2 csv , 3,2,4,
par_groupby -N1 3 $_%=2 csv , 3,2,2,
par_groupby -N1 3 $_%=2 csv , NewRec
par_groupby -N1 3 $_%=2 csv , 3,2,3,
par_groupby -N1 3 tsv \t ### test tsv | --colsep \t --groupby 3 -N1
par_groupby -N1 3 tsv \t NewRec
par_groupby -N1 3 tsv \t a1 b1 c1
par_groupby -N1 3 tsv \t NewRec
par_groupby -N1 3 tsv \t 2 2 2
par_groupby -N1 3 tsv \t 3 2 2
par_groupby -N1 3 tsv \t 3 3 2
par_groupby -N1 3 tsv \t NewRec
par_groupby -N1 3 tsv \t 3 2 4
par_groupby -N1 3 tsv \t NewRec
par_groupby -N1 3 tsv \t 3 2 2
par_groupby -N1 3 tsv \t NewRec
par_groupby -N1 3 tsv \t 3 2 3
par_groupby -N1 3 ssv \s+ ### test ssv | --colsep \s+ --groupby 3 -N1
par_groupby -N1 3 ssv \s+ NewRec
par_groupby -N1 3 ssv \s+ a1 b1 c1
par_groupby -N1 3 ssv \s+ NewRec
par_groupby -N1 3 ssv \s+ 2 2 2
par_groupby -N1 3 ssv \s+ 3 2 2
par_groupby -N1 3 ssv \s+ 3 3 2
par_groupby -N1 3 ssv \s+ NewRec
par_groupby -N1 3 ssv \s+ 3 2 4
par_groupby -N1 3 ssv \s+ NewRec
par_groupby -N1 3 ssv \s+ 3 2 2
par_groupby -N1 3 ssv \s+ NewRec
par_groupby -N1 3 ssv \s+ 3 2 3
par_groupby -N1 3 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby 3 -N1
par_groupby -N1 3 cssv [\s,]+ NewRec
par_groupby -N1 3 cssv [\s,]+ a1, b1, c1,
par_groupby -N1 3 cssv [\s,]+ NewRec
par_groupby -N1 3 cssv [\s,]+ 2 ,2 ,2 ,
par_groupby -N1 3 cssv [\s,]+ 3 , 2 , 2 ,
par_groupby -N1 3 cssv [\s,]+ 3 , 3 , 2 ,
par_groupby -N1 3 cssv [\s,]+ NewRec
par_groupby -N1 3 cssv [\s,]+ 3,,2,,4,,
par_groupby -N1 3 cssv [\s,]+ NewRec
par_groupby -N1 3 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,,
par_groupby -N1 3 cssv [\s,]+ NewRec
par_groupby -N1 3 cssv [\s,]+ 3 2 3
par_groupby -N1 3 csv , ### test csv | --colsep , --groupby 3 -N1
par_groupby -N1 3 csv , NewRec
par_groupby -N1 3 csv , a1,b1,c1,
par_groupby -N1 3 csv , NewRec
par_groupby -N1 3 csv , 2,2,2,
par_groupby -N1 3 csv , 3,2,2,
par_groupby -N1 3 csv , 3,3,2,
par_groupby -N1 3 csv , NewRec
par_groupby -N1 3 csv , 3,2,4,
par_groupby -N1 3 csv , NewRec
par_groupby -N1 3 csv , 3,2,2,
par_groupby -N1 3 csv , NewRec
par_groupby -N1 3 csv , 3,2,3,
par_groupby -N1 s/^(.).*/$1/ tsv \t ### test tsv | --colsep \t --groupby s/^(.).*/$1/ -N1
par_groupby -N1 s/^(.).*/$1/ tsv \t NewRec
par_groupby -N1 s/^(.).*/$1/ tsv \t a1 b1 c1
par_groupby -N1 s/^(.).*/$1/ tsv \t NewRec
par_groupby -N1 s/^(.).*/$1/ tsv \t 2 2 2
par_groupby -N1 s/^(.).*/$1/ tsv \t NewRec
par_groupby -N1 s/^(.).*/$1/ tsv \t 3 2 2
par_groupby -N1 s/^(.).*/$1/ tsv \t 3 3 2
par_groupby -N1 s/^(.).*/$1/ tsv \t 3 2 4
par_groupby -N1 s/^(.).*/$1/ tsv \t 3 2 2
par_groupby -N1 s/^(.).*/$1/ tsv \t 3 2 3
par_groupby -N1 s/^(.).*/$1/ ssv \s+ ### test ssv | --colsep \s+ --groupby s/^(.).*/$1/ -N1
par_groupby -N1 s/^(.).*/$1/ ssv \s+ NewRec
par_groupby -N1 s/^(.).*/$1/ ssv \s+ a1 b1 c1
par_groupby -N1 s/^(.).*/$1/ ssv \s+ NewRec
par_groupby -N1 s/^(.).*/$1/ ssv \s+ 2 2 2
par_groupby -N1 s/^(.).*/$1/ ssv \s+ NewRec
par_groupby -N1 s/^(.).*/$1/ ssv \s+ 3 2 2
par_groupby -N1 s/^(.).*/$1/ ssv \s+ 3 3 2
par_groupby -N1 s/^(.).*/$1/ ssv \s+ 3 2 4
par_groupby -N1 s/^(.).*/$1/ ssv \s+ 3 2 2
par_groupby -N1 s/^(.).*/$1/ ssv \s+ 3 2 3
par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby s/^(.).*/$1/ -N1
par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ NewRec
par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ a1, b1, c1,
par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ NewRec
par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ 2 ,2 ,2 ,
par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ NewRec
par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ 3 , 2 , 2 ,
par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ 3 , 3 , 2 ,
par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ 3,,2,,4,,
par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,,
par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ 3 2 3
par_groupby -N1 s/^(.).*/$1/ csv , ### test csv | --colsep , --groupby s/^(.).*/$1/ -N1
par_groupby -N1 s/^(.).*/$1/ csv , NewRec
par_groupby -N1 s/^(.).*/$1/ csv , a1,b1,c1,
par_groupby -N1 s/^(.).*/$1/ csv , NewRec
par_groupby -N1 s/^(.).*/$1/ csv , 2,2,2,
par_groupby -N1 s/^(.).*/$1/ csv , NewRec
par_groupby -N1 s/^(.).*/$1/ csv , 3,2,2,
par_groupby -N1 s/^(.).*/$1/ csv , 3,3,2,
par_groupby -N1 s/^(.).*/$1/ csv , 3,2,4,
par_groupby -N1 s/^(.).*/$1/ csv , 3,2,2,
par_groupby -N1 s/^(.).*/$1/ csv , 3,2,3,
par_groupby -N1 c1 tsv \t ### test tsv | --colsep \t --groupby c1 -N1
par_groupby -N1 c1 tsv \t NewRec
par_groupby -N1 c1 tsv \t a1 b1 c1
par_groupby -N1 c1 tsv \t 2 2 2
par_groupby -N1 c1 tsv \t 3 2 2
par_groupby -N1 c1 tsv \t 3 3 2
par_groupby -N1 c1 tsv \t NewRec
par_groupby -N1 c1 tsv \t a1 b1 c1
par_groupby -N1 c1 tsv \t 3 2 4
par_groupby -N1 c1 tsv \t NewRec
par_groupby -N1 c1 tsv \t a1 b1 c1
par_groupby -N1 c1 tsv \t 3 2 2
par_groupby -N1 c1 tsv \t NewRec
par_groupby -N1 c1 tsv \t a1 b1 c1
par_groupby -N1 c1 tsv \t 3 2 3
par_groupby -N1 c1 ssv \s+ ### test ssv | --colsep \s+ --groupby c1 -N1
par_groupby -N1 c1 ssv \s+ NewRec
par_groupby -N1 c1 ssv \s+ a1 b1 c1
par_groupby -N1 c1 ssv \s+ 2 2 2
par_groupby -N1 c1 ssv \s+ 3 2 2
par_groupby -N1 c1 ssv \s+ 3 3 2
par_groupby -N1 c1 ssv \s+ NewRec
par_groupby -N1 c1 ssv \s+ a1 b1 c1
par_groupby -N1 c1 ssv \s+ 3 2 4
par_groupby -N1 c1 ssv \s+ NewRec
par_groupby -N1 c1 ssv \s+ a1 b1 c1
par_groupby -N1 c1 ssv \s+ 3 2 2
par_groupby -N1 c1 ssv \s+ NewRec
par_groupby -N1 c1 ssv \s+ a1 b1 c1
par_groupby -N1 c1 ssv \s+ 3 2 3
par_groupby -N1 c1 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby c1 -N1
par_groupby -N1 c1 cssv [\s,]+ NewRec
par_groupby -N1 c1 cssv [\s,]+ a1, b1, c1,
par_groupby -N1 c1 cssv [\s,]+ 2 ,2 ,2 ,
par_groupby -N1 c1 cssv [\s,]+ 3 , 2 , 2 ,
par_groupby -N1 c1 cssv [\s,]+ 3 , 3 , 2 ,
par_groupby -N1 c1 cssv [\s,]+ NewRec
par_groupby -N1 c1 cssv [\s,]+ a1, b1, c1,
par_groupby -N1 c1 cssv [\s,]+ 3,,2,,4,,
par_groupby -N1 c1 cssv [\s,]+ NewRec
par_groupby -N1 c1 cssv [\s,]+ a1, b1, c1,
par_groupby -N1 c1 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,,
par_groupby -N1 c1 cssv [\s,]+ NewRec
par_groupby -N1 c1 cssv [\s,]+ a1, b1, c1,
par_groupby -N1 c1 cssv [\s,]+ 3 2 3
par_groupby -N1 c1 csv , ### test csv | --colsep , --groupby c1 -N1
par_groupby -N1 c1 csv , NewRec
par_groupby -N1 c1 csv , a1,b1,c1,
par_groupby -N1 c1 csv , 2,2,2,
par_groupby -N1 c1 csv , 3,2,2,
par_groupby -N1 c1 csv , 3,3,2,
par_groupby -N1 c1 csv , NewRec
par_groupby -N1 c1 csv , a1,b1,c1,
par_groupby -N1 c1 csv , 3,2,4,
par_groupby -N1 c1 csv , NewRec
par_groupby -N1 c1 csv , a1,b1,c1,
par_groupby -N1 c1 csv , 3,2,2,
par_groupby -N1 c1 csv , NewRec
par_groupby -N1 c1 csv , a1,b1,c1,
par_groupby -N1 c1 csv , 3,2,3,
par_groupby -N1 c1 $_%=2 tsv \t ### test tsv | --colsep \t --groupby c1 $_%=2 -N1
par_groupby -N1 c1 $_%=2 tsv \t NewRec
par_groupby -N1 c1 $_%=2 tsv \t a1 b1 c1
par_groupby -N1 c1 $_%=2 tsv \t 2 2 2
par_groupby -N1 c1 $_%=2 tsv \t 3 2 2
par_groupby -N1 c1 $_%=2 tsv \t 3 3 2
par_groupby -N1 c1 $_%=2 tsv \t 3 2 4
par_groupby -N1 c1 $_%=2 tsv \t 3 2 2
par_groupby -N1 c1 $_%=2 tsv \t NewRec
par_groupby -N1 c1 $_%=2 tsv \t a1 b1 c1
par_groupby -N1 c1 $_%=2 tsv \t 3 2 3
par_groupby -N1 c1 $_%=2 ssv \s+ ### test ssv | --colsep \s+ --groupby c1 $_%=2 -N1
par_groupby -N1 c1 $_%=2 ssv \s+ NewRec
par_groupby -N1 c1 $_%=2 ssv \s+ a1 b1 c1
par_groupby -N1 c1 $_%=2 ssv \s+ 2 2 2
par_groupby -N1 c1 $_%=2 ssv \s+ 3 2 2
par_groupby -N1 c1 $_%=2 ssv \s+ 3 3 2
par_groupby -N1 c1 $_%=2 ssv \s+ 3 2 4
par_groupby -N1 c1 $_%=2 ssv \s+ 3 2 2
par_groupby -N1 c1 $_%=2 ssv \s+ NewRec
par_groupby -N1 c1 $_%=2 ssv \s+ a1 b1 c1
par_groupby -N1 c1 $_%=2 ssv \s+ 3 2 3
par_groupby -N1 c1 $_%=2 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby c1 $_%=2 -N1
par_groupby -N1 c1 $_%=2 cssv [\s,]+ NewRec
par_groupby -N1 c1 $_%=2 cssv [\s,]+ a1, b1, c1,
par_groupby -N1 c1 $_%=2 cssv [\s,]+ 2 ,2 ,2 ,
par_groupby -N1 c1 $_%=2 cssv [\s,]+ 3 , 2 , 2 ,
par_groupby -N1 c1 $_%=2 cssv [\s,]+ 3 , 3 , 2 ,
par_groupby -N1 c1 $_%=2 cssv [\s,]+ 3,,2,,4,,
par_groupby -N1 c1 $_%=2 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,,
par_groupby -N1 c1 $_%=2 cssv [\s,]+ NewRec
par_groupby -N1 c1 $_%=2 cssv [\s,]+ a1, b1, c1,
par_groupby -N1 c1 $_%=2 cssv [\s,]+ 3 2 3
par_groupby -N1 c1 $_%=2 csv , ### test csv | --colsep , --groupby c1 $_%=2 -N1
par_groupby -N1 c1 $_%=2 csv , NewRec
par_groupby -N1 c1 $_%=2 csv , a1,b1,c1,
par_groupby -N1 c1 $_%=2 csv , 2,2,2,
par_groupby -N1 c1 $_%=2 csv , 3,2,2,
par_groupby -N1 c1 $_%=2 csv , 3,3,2,
par_groupby -N1 c1 $_%=2 csv , 3,2,4,
par_groupby -N1 c1 $_%=2 csv , 3,2,2,
par_groupby -N1 c1 $_%=2 csv , NewRec
par_groupby -N1 c1 $_%=2 csv , a1,b1,c1,
par_groupby -N1 c1 $_%=2 csv , 3,2,3,
par_groupby --block 20 3 $_%=2 tsv \t ### test tsv | --colsep \t --groupby 3 $_%=2 --block 20
par_groupby --block 20 3 $_%=2 tsv \t NewRec
par_groupby --block 20 3 $_%=2 tsv \t a1 b1 c1
par_groupby --block 20 3 $_%=2 tsv \t 2 2 2
par_groupby --block 20 3 $_%=2 tsv \t 3 2 2
par_groupby --block 20 3 $_%=2 tsv \t 3 3 2
par_groupby --block 20 3 $_%=2 tsv \t 3 2 4
par_groupby --block 20 3 $_%=2 tsv \t 3 2 2
par_groupby --block 20 3 $_%=2 tsv \t NewRec
par_groupby --block 20 3 $_%=2 tsv \t 3 2 3
par_groupby --block 20 3 $_%=2 tsv \t parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 3 $_%=2 tsv \t parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 3 $_%=2 tsv \t parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 3 $_%=2 tsv \t parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 3 $_%=2 ssv \s+ ### test ssv | --colsep \s+ --groupby 3 $_%=2 --block 20
par_groupby --block 20 3 $_%=2 ssv \s+ NewRec
par_groupby --block 20 3 $_%=2 ssv \s+ a1 b1 c1
par_groupby --block 20 3 $_%=2 ssv \s+ 2 2 2
par_groupby --block 20 3 $_%=2 ssv \s+ 3 2 2
par_groupby --block 20 3 $_%=2 ssv \s+ 3 3 2
par_groupby --block 20 3 $_%=2 ssv \s+ 3 2 4
par_groupby --block 20 3 $_%=2 ssv \s+ 3 2 2
par_groupby --block 20 3 $_%=2 ssv \s+ NewRec
par_groupby --block 20 3 $_%=2 ssv \s+ 3 2 3
par_groupby --block 20 3 $_%=2 ssv \s+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 3 $_%=2 ssv \s+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 3 $_%=2 ssv \s+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 3 $_%=2 ssv \s+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 3 $_%=2 ssv \s+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87.
par_groupby --block 20 3 $_%=2 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby 3 $_%=2 --block 20
par_groupby --block 20 3 $_%=2 cssv [\s,]+ NewRec
par_groupby --block 20 3 $_%=2 cssv [\s,]+ a1, b1, c1,
par_groupby --block 20 3 $_%=2 cssv [\s,]+ 2 ,2 ,2 ,
par_groupby --block 20 3 $_%=2 cssv [\s,]+ 3 , 2 , 2 ,
par_groupby --block 20 3 $_%=2 cssv [\s,]+ 3 , 3 , 2 ,
par_groupby --block 20 3 $_%=2 cssv [\s,]+ 3,,2,,4,,
par_groupby --block 20 3 $_%=2 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,,
par_groupby --block 20 3 $_%=2 cssv [\s,]+ 3 2 3
par_groupby --block 20 3 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 3 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 3 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 3 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 3 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87.
par_groupby --block 20 3 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 87. Increasing to --blocksize 115.
par_groupby --block 20 3 $_%=2 csv , ### test csv | --colsep , --groupby 3 $_%=2 --block 20
par_groupby --block 20 3 $_%=2 csv , NewRec
par_groupby --block 20 3 $_%=2 csv , a1,b1,c1,
par_groupby --block 20 3 $_%=2 csv , 2,2,2,
par_groupby --block 20 3 $_%=2 csv , 3,2,2,
par_groupby --block 20 3 $_%=2 csv , 3,3,2,
par_groupby --block 20 3 $_%=2 csv , 3,2,4,
par_groupby --block 20 3 $_%=2 csv , 3,2,2,
par_groupby --block 20 3 $_%=2 csv , NewRec
par_groupby --block 20 3 $_%=2 csv , 3,2,3,
par_groupby --block 20 3 $_%=2 csv , parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 3 $_%=2 csv , parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 3 $_%=2 csv , parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 3 $_%=2 csv , parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 3 tsv \t ### test tsv | --colsep \t --groupby 3 --block 20
par_groupby --block 20 3 tsv \t NewRec
par_groupby --block 20 3 tsv \t a1 b1 c1
par_groupby --block 20 3 tsv \t NewRec
par_groupby --block 20 3 tsv \t 2 2 2
par_groupby --block 20 3 tsv \t 3 2 2
par_groupby --block 20 3 tsv \t 3 3 2
par_groupby --block 20 3 tsv \t NewRec
par_groupby --block 20 3 tsv \t 3 2 4
par_groupby --block 20 3 tsv \t NewRec
par_groupby --block 20 3 tsv \t 3 2 2
par_groupby --block 20 3 tsv \t 3 2 3
par_groupby --block 20 3 tsv \t parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 3 tsv \t parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 3 tsv \t parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 3 tsv \t parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 3 ssv \s+ ### test ssv | --colsep \s+ --groupby 3 --block 20
par_groupby --block 20 3 ssv \s+ NewRec
par_groupby --block 20 3 ssv \s+ a1 b1 c1
par_groupby --block 20 3 ssv \s+ NewRec
par_groupby --block 20 3 ssv \s+ 2 2 2
par_groupby --block 20 3 ssv \s+ 3 2 2
par_groupby --block 20 3 ssv \s+ 3 3 2
par_groupby --block 20 3 ssv \s+ NewRec
par_groupby --block 20 3 ssv \s+ 3 2 4
par_groupby --block 20 3 ssv \s+ 3 2 2
par_groupby --block 20 3 ssv \s+ NewRec
par_groupby --block 20 3 ssv \s+ 3 2 3
par_groupby --block 20 3 ssv \s+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 3 ssv \s+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 3 ssv \s+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 3 ssv \s+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 3 ssv \s+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87.
par_groupby --block 20 3 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby 3 --block 20
par_groupby --block 20 3 cssv [\s,]+ NewRec
par_groupby --block 20 3 cssv [\s,]+ a1, b1, c1,
par_groupby --block 20 3 cssv [\s,]+ NewRec
par_groupby --block 20 3 cssv [\s,]+ 2 ,2 ,2 ,
par_groupby --block 20 3 cssv [\s,]+ 3 , 2 , 2 ,
par_groupby --block 20 3 cssv [\s,]+ 3 , 3 , 2 ,
par_groupby --block 20 3 cssv [\s,]+ NewRec
par_groupby --block 20 3 cssv [\s,]+ 3,,2,,4,,
par_groupby --block 20 3 cssv [\s,]+ NewRec
par_groupby --block 20 3 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,,
par_groupby --block 20 3 cssv [\s,]+ 3 2 3
par_groupby --block 20 3 cssv [\s,]+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 3 cssv [\s,]+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 3 cssv [\s,]+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 3 cssv [\s,]+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 3 cssv [\s,]+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87.
par_groupby --block 20 3 csv , ### test csv | --colsep , --groupby 3 --block 20
par_groupby --block 20 3 csv , NewRec
par_groupby --block 20 3 csv , a1,b1,c1,
par_groupby --block 20 3 csv , NewRec
par_groupby --block 20 3 csv , 2,2,2,
par_groupby --block 20 3 csv , 3,2,2,
par_groupby --block 20 3 csv , 3,3,2,
par_groupby --block 20 3 csv , NewRec
par_groupby --block 20 3 csv , 3,2,4,
par_groupby --block 20 3 csv , NewRec
par_groupby --block 20 3 csv , 3,2,2,
par_groupby --block 20 3 csv , 3,2,3,
par_groupby --block 20 3 csv , parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 3 csv , parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 3 csv , parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 3 csv , parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 s/^(.).*/$1/ tsv \t ### test tsv | --colsep \t --groupby s/^(.).*/$1/ --block 20
par_groupby --block 20 s/^(.).*/$1/ tsv \t NewRec
par_groupby --block 20 s/^(.).*/$1/ tsv \t a1 b1 c1
par_groupby --block 20 s/^(.).*/$1/ tsv \t NewRec
par_groupby --block 20 s/^(.).*/$1/ tsv \t 2 2 2
par_groupby --block 20 s/^(.).*/$1/ tsv \t NewRec
par_groupby --block 20 s/^(.).*/$1/ tsv \t 3 2 2
par_groupby --block 20 s/^(.).*/$1/ tsv \t 3 3 2
par_groupby --block 20 s/^(.).*/$1/ tsv \t 3 2 4
par_groupby --block 20 s/^(.).*/$1/ tsv \t 3 2 2
par_groupby --block 20 s/^(.).*/$1/ tsv \t 3 2 3
par_groupby --block 20 s/^(.).*/$1/ tsv \t parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 s/^(.).*/$1/ tsv \t parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 s/^(.).*/$1/ tsv \t parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 s/^(.).*/$1/ tsv \t parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ ### test ssv | --colsep \s+ --groupby s/^(.).*/$1/ --block 20
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ NewRec
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ a1 b1 c1
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ NewRec
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ 2 2 2
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ NewRec
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ 3 2 2
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ 3 3 2
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ 3 2 4
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ 3 2 2
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ 3 2 3
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 s/^(.).*/$1/ ssv \s+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87.
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby s/^(.).*/$1/ --block 20
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ NewRec
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ a1, b1, c1,
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ NewRec
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ 2 ,2 ,2 ,
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ NewRec
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ 3 , 2 , 2 ,
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ 3 , 3 , 2 ,
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ 3,,2,,4,,
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,,
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ 3 2 3
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87.
par_groupby --block 20 s/^(.).*/$1/ csv , ### test csv | --colsep , --groupby s/^(.).*/$1/ --block 20
par_groupby --block 20 s/^(.).*/$1/ csv , NewRec
par_groupby --block 20 s/^(.).*/$1/ csv , a1,b1,c1,
par_groupby --block 20 s/^(.).*/$1/ csv , NewRec
par_groupby --block 20 s/^(.).*/$1/ csv , 2,2,2,
par_groupby --block 20 s/^(.).*/$1/ csv , NewRec
par_groupby --block 20 s/^(.).*/$1/ csv , 3,2,2,
par_groupby --block 20 s/^(.).*/$1/ csv , 3,3,2,
par_groupby --block 20 s/^(.).*/$1/ csv , 3,2,4,
par_groupby --block 20 s/^(.).*/$1/ csv , 3,2,2,
par_groupby --block 20 s/^(.).*/$1/ csv , 3,2,3,
par_groupby --block 20 s/^(.).*/$1/ csv , parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 s/^(.).*/$1/ csv , parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 s/^(.).*/$1/ csv , parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 s/^(.).*/$1/ csv , parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 c1 tsv \t ### test tsv | --colsep \t --groupby c1 --block 20
par_groupby --block 20 c1 tsv \t NewRec
par_groupby --block 20 c1 tsv \t a1 b1 c1
par_groupby --block 20 c1 tsv \t 2 2 2
par_groupby --block 20 c1 tsv \t 3 2 2
par_groupby --block 20 c1 tsv \t 3 3 2
par_groupby --block 20 c1 tsv \t NewRec
par_groupby --block 20 c1 tsv \t a1 b1 c1
par_groupby --block 20 c1 tsv \t 3 2 4
par_groupby --block 20 c1 tsv \t NewRec
par_groupby --block 20 c1 tsv \t a1 b1 c1
par_groupby --block 20 c1 tsv \t 3 2 2
par_groupby --block 20 c1 tsv \t NewRec
par_groupby --block 20 c1 tsv \t a1 b1 c1
par_groupby --block 20 c1 tsv \t 3 2 3
par_groupby --block 20 c1 tsv \t parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 c1 tsv \t parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 c1 tsv \t parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 c1 ssv \s+ ### test ssv | --colsep \s+ --groupby c1 --block 20
par_groupby --block 20 c1 ssv \s+ NewRec
par_groupby --block 20 c1 ssv \s+ a1 b1 c1
par_groupby --block 20 c1 ssv \s+ 2 2 2
par_groupby --block 20 c1 ssv \s+ 3 2 2
par_groupby --block 20 c1 ssv \s+ 3 3 2
par_groupby --block 20 c1 ssv \s+ NewRec
par_groupby --block 20 c1 ssv \s+ a1 b1 c1
par_groupby --block 20 c1 ssv \s+ 3 2 4
par_groupby --block 20 c1 ssv \s+ NewRec
par_groupby --block 20 c1 ssv \s+ a1 b1 c1
par_groupby --block 20 c1 ssv \s+ 3 2 2
par_groupby --block 20 c1 ssv \s+ NewRec
par_groupby --block 20 c1 ssv \s+ a1 b1 c1
par_groupby --block 20 c1 ssv \s+ 3 2 3
par_groupby --block 20 c1 ssv \s+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 c1 ssv \s+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 c1 ssv \s+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 c1 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby c1 --block 20
par_groupby --block 20 c1 cssv [\s,]+ NewRec
par_groupby --block 20 c1 cssv [\s,]+ a1, b1, c1,
par_groupby --block 20 c1 cssv [\s,]+ 2 ,2 ,2 ,
par_groupby --block 20 c1 cssv [\s,]+ 3 , 2 , 2 ,
par_groupby --block 20 c1 cssv [\s,]+ 3 , 3 , 2 ,
par_groupby --block 20 c1 cssv [\s,]+ NewRec
par_groupby --block 20 c1 cssv [\s,]+ a1, b1, c1,
par_groupby --block 20 c1 cssv [\s,]+ 3,,2,,4,,
par_groupby --block 20 c1 cssv [\s,]+ NewRec
par_groupby --block 20 c1 cssv [\s,]+ a1, b1, c1,
par_groupby --block 20 c1 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,,
par_groupby --block 20 c1 cssv [\s,]+ 3 2 3
par_groupby --block 20 c1 cssv [\s,]+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 c1 cssv [\s,]+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 c1 cssv [\s,]+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 c1 cssv [\s,]+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 c1 csv , ### test csv | --colsep , --groupby c1 --block 20
par_groupby --block 20 c1 csv , NewRec
par_groupby --block 20 c1 csv , a1,b1,c1,
par_groupby --block 20 c1 csv , 2,2,2,
par_groupby --block 20 c1 csv , 3,2,2,
par_groupby --block 20 c1 csv , 3,3,2,
par_groupby --block 20 c1 csv , NewRec
par_groupby --block 20 c1 csv , a1,b1,c1,
par_groupby --block 20 c1 csv , 3,2,4,
par_groupby --block 20 c1 csv , NewRec
par_groupby --block 20 c1 csv , a1,b1,c1,
par_groupby --block 20 c1 csv , 3,2,2,
par_groupby --block 20 c1 csv , NewRec
par_groupby --block 20 c1 csv , a1,b1,c1,
par_groupby --block 20 c1 csv , 3,2,3,
par_groupby --block 20 c1 csv , parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 c1 csv , parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 c1 csv , parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 c1 $_%=2 tsv \t ### test tsv | --colsep \t --groupby c1 $_%=2 --block 20
par_groupby --block 20 c1 $_%=2 tsv \t NewRec
par_groupby --block 20 c1 $_%=2 tsv \t a1 b1 c1
par_groupby --block 20 c1 $_%=2 tsv \t 2 2 2
par_groupby --block 20 c1 $_%=2 tsv \t 3 2 2
par_groupby --block 20 c1 $_%=2 tsv \t 3 3 2
par_groupby --block 20 c1 $_%=2 tsv \t 3 2 4
par_groupby --block 20 c1 $_%=2 tsv \t 3 2 2
par_groupby --block 20 c1 $_%=2 tsv \t 3 2 3
par_groupby --block 20 c1 $_%=2 tsv \t parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 c1 $_%=2 tsv \t parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 c1 $_%=2 tsv \t parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 c1 $_%=2 tsv \t parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 c1 $_%=2 ssv \s+ ### test ssv | --colsep \s+ --groupby c1 $_%=2 --block 20
par_groupby --block 20 c1 $_%=2 ssv \s+ NewRec
par_groupby --block 20 c1 $_%=2 ssv \s+ a1 b1 c1
par_groupby --block 20 c1 $_%=2 ssv \s+ 2 2 2
par_groupby --block 20 c1 $_%=2 ssv \s+ 3 2 2
par_groupby --block 20 c1 $_%=2 ssv \s+ 3 3 2
par_groupby --block 20 c1 $_%=2 ssv \s+ 3 2 4
par_groupby --block 20 c1 $_%=2 ssv \s+ 3 2 2
par_groupby --block 20 c1 $_%=2 ssv \s+ 3 2 3
par_groupby --block 20 c1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 c1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 c1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 c1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 c1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87.
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby c1 $_%=2 --block 20
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ NewRec
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ a1, b1, c1,
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ 2 ,2 ,2 ,
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ 3 , 2 , 2 ,
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ 3 , 3 , 2 ,
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ 3,,2,,4,,
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,,
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ 3 2 3
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87.
par_groupby --block 20 c1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 87. Increasing to --blocksize 115.
par_groupby --block 20 c1 $_%=2 csv , ### test csv | --colsep , --groupby c1 $_%=2 --block 20
par_groupby --block 20 c1 $_%=2 csv , NewRec
par_groupby --block 20 c1 $_%=2 csv , a1,b1,c1,
par_groupby --block 20 c1 $_%=2 csv , 2,2,2,
par_groupby --block 20 c1 $_%=2 csv , 3,2,2,
par_groupby --block 20 c1 $_%=2 csv , 3,3,2,
par_groupby --block 20 c1 $_%=2 csv , 3,2,4,
par_groupby --block 20 c1 $_%=2 csv , 3,2,2,
par_groupby --block 20 c1 $_%=2 csv , 3,2,3,
par_groupby --block 20 c1 $_%=2 csv , parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
par_groupby --block 20 c1 $_%=2 csv , parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
par_groupby --block 20 c1 $_%=2 csv , parallel: Warning: A record was longer than 37. Increasing to --blocksize 50.
par_groupby --block 20 c1 $_%=2 csv , parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_keeporder_roundrobin bug #50081: --keep-order --round-robin should give predictable results par_keeporder_roundrobin bug #50081: --keep-order --round-robin should give predictable results
par_keeporder_roundrobin OK par_keeporder_roundrobin OK
par_kill_hup ### Are children killed if GNU Parallel receives HUP? There should be no sleep at the end par_kill_hup ### Are children killed if GNU Parallel receives HUP? There should be no sleep at the end