parallel: --pipepart --groupby implemented.

This commit is contained in:
Ole Tange 2019-05-22 21:57:08 +02:00
parent aa62104eb5
commit c25ae9cc87
8 changed files with 573 additions and 42 deletions

View file

@ -588,12 +588,12 @@ sub split_positions_for_group_by($$$$) {
if(defined $_) { if(defined $_) {
# Not end of file # Not end of file
my @F; my @F;
if(defined $Global::group_by_column) { if(defined $group_by::col) {
$opt::colsep ||= "\t"; $opt::colsep ||= "\t";
@F = split /$opt::colsep/, $_; @F = split /$opt::colsep/, $_;
$_ = $F[$Global::group_by_column]; $_ = $F[$group_by::col];
} }
eval $Global::group_by_perlexpr; eval $group_by::perlexpr;
} }
return ($_,$linepos); return ($_,$linepos);
} }
@ -641,7 +641,7 @@ sub split_positions_for_group_by($$$$) {
my @pos; my @pos;
$fh = open_or_exit($file); $fh = open_or_exit($file);
# Set $Global::group_by_column $Global::group_by_perlexpr # Set $Global::group_by_column $Global::group_by_perlexpr
group_by_loop($opt::recsep); group_by_loop($fh,$opt::recsep);
# $xpos = linestart, $x = value at $xpos, $apos < $bpos < $cpos # $xpos = linestart, $x = value at $xpos, $apos < $bpos < $cpos
$apos = length $header; $apos = length $header;
for(($a,$apos) = value_at($apos); $apos < $size;) { for(($a,$apos) = value_at($apos); $apos < $size;) {
@ -718,45 +718,67 @@ sub cat_partial($@) {
" perl -e '$script' @start_len |"; " perl -e '$script' @start_len |";
} }
sub group_by_loop($) { sub column_perlexpr($$$) {
# Generate perl code for group-by loop # Compute the column number (if any), perlexpression from combined
# Insert a $recsep when the column value changes # string (such as --shard key, --groupby key, {=n perlexpr=}
# The column value can be computed with $perexpr # Input:
my($recsep) = @_; # $column_perlexpr = string with column and perl expression
my $groupby = $opt::groupby; # $header = header from input file (if column is column name)
my ($col,$perlexpr); # $colsep = column separator regexp
if($groupby =~ /^[a-z0-9_]+(\s|$)/i) { # Returns:
# $col = column number
# $perlexpr = perl expression
# $subref = compiled perl expression as sub reference
my ($column_perlexpr, $header, $colsep) = @_;
my ($col, $perlexpr, $subref);
if($column_perlexpr =~ /^[-a-z0-9_]+(\s|$)/i) {
# Column name/number (possibly prefix) # Column name/number (possibly prefix)
if($groupby =~ s/^(\d+)\s*//) { if($column_perlexpr =~ s/^(-?\d+)(\s|$)//) {
# Column number (possibly prefix) # Column number (possibly prefix)
$col = $1-1; $col = $1;
} elsif($groupby =~ s/^([a-z0-9_]+)\s*//i) { } elsif($column_perlexpr =~ s/^([a-z0-9_]+)(\s+|$)//i) {
# Column name (possibly prefix) # Column name (possibly prefix)
my $colname = $1; 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 # Split on --copsep pattern
my @headers = split/$opt::colsep/, $Global::header; my @headers = split /$colsep/, $header;
my %headers; my %headers;
# Numbered 0..n-1 due to being used by $F[n] @headers{@headers} = (1..($#headers+1));
@headers{@headers} = (0..$#headers);
$col = $headers{$colname}; $col = $headers{$colname};
if(not defined $col) { if(not defined $col) {
::error("Column '$colname' $opt::colsep not found in header",keys %headers); ::error("Column '$colname' $colsep not found in header",keys %headers);
::wait_and_exit(255); ::wait_and_exit(255);
} }
} }
} }
# What is left of $groupby is $perlexpr # What is left of $column_perlexpr is $perlexpr (possibly empty)
$perlexpr = $groupby; $perlexpr = $column_perlexpr;
$Global::group_by_perlexpr = $perlexpr; $subref = eval("sub { no strict; no warnings; $perlexpr }");
$Global::group_by_column = $col; return($col, $perlexpr, $subref);
}
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($fh,$recsep) = @_;
my $groupby = $opt::groupby;
if($groupby =~ /^[a-z_][a-z_0-9]*(\s|$)/i) {
# Group by column name
# (Yes, this will also wrongly match a perlexpr like: chop)
my($read,$char,@line);
# A full line, but nothing more (the rest must be read by the child)
# $Global::header used to prepend block to each job
do {
$read = sysread($fh,$char,1);
push @line, $char;
} while($read and $char ne "\n");
$Global::header = join "", @line;
}
$opt::colsep ||= "\t";
($group_by::col, $group_by::perlexpr, $group_by::subref) =
column_perlexpr($groupby, $Global::header, $opt::colsep);
# Numbered 0..n-1 due to being used by $F[n]
if($group_by::col) { $group_by::col--; }
my $loop = ::spacefree(0,'{ my $loop = ::spacefree(0,'{
local $_=COLVALUE; local $_=COLVALUE;
@ -768,12 +790,12 @@ sub group_by_loop($) {
} }
}'); }');
if(defined $col) { if(defined $group_by::col) {
$loop =~ s/COLVALUE/\$F[$col]/g; $loop =~ s/COLVALUE/\$F[$group_by::col]/g;
} else { } else {
$loop =~ s/COLVALUE/\$_/g; $loop =~ s/COLVALUE/\$_/g;
} }
$loop =~ s/PERLEXPR/$perlexpr/g; $loop =~ s/PERLEXPR/$group_by::perlexpr/g;
$loop =~ s/RECSEP/$recsep/g; $loop =~ s/RECSEP/$recsep/g;
return $loop; return $loop;
} }
@ -797,7 +819,7 @@ sub group_by_stdin_filter() {
push @filter, "-F$sep"; push @filter, "-F$sep";
} }
push @filter, "-pe"; push @filter, "-pe";
push @filter, group_by_loop($opt::recstart); push @filter, group_by_loop(*STDIN,$opt::recstart);
::debug("init", "@filter\n"); ::debug("init", "@filter\n");
open(STDIN, '-|', @filter) || die ("Cannot start @filter"); open(STDIN, '-|', @filter) || die ("Cannot start @filter");
} }

View file

@ -2155,18 +2155,18 @@ Only supported in B<Ash, Bash, Dash, Ksh, Sh, and Zsh>.
See also B<--env>, B<--record-env>. See also B<--env>, B<--record-env>.
=item B<--shard> I<shardkey> (beta testing) =item B<--shard> I<shardcol> (beta testing)
Use column I<shardkey> as shard key and shard input to the jobs. Use column I<shardcol> as shard key and shard input to the jobs.
Each input line is split using B<--colsep>. The value in the Each input line is split using B<--colsep>. The value in the
I<shardkey> column is hashed so that all lines of a given value is I<shardcol> column is hashed so that all lines of a given value is
given to the same job slot. given to the same job slot.
This is similar to sharding in databases. This is similar to sharding in databases.
The performance is in the order of 100K rows per second. Faster if the The performance is in the order of 100K rows per second. Faster if the
I<shardkey> is small (<10), slower if it is big (>100). I<shardcol> is small (<10), slower if it is big (>100).
B<--shard> requires B<--pipe> and a fixed numeric value for B<--jobs>. B<--shard> requires B<--pipe> and a fixed numeric value for B<--jobs>.
@ -2970,6 +2970,14 @@ Find the files in a list that do not exist
cat file_list | parallel 'if [ ! -e {} ] ; then echo {}; fi' cat file_list | parallel 'if [ ! -e {} ] ; then echo {}; fi'
=head1 EXAMPLE: Composed command with perl replacement string
You have a bunch of file. You want them sorted into dirs. The dir of
each file should be named the first letter of the file name.
parallel 'mkdir -p {=s/(.).*/$1/=}; mv {} {=s/(.).*/$1/=}' ::: *
=head1 EXAMPLE: Composed command with multiple input sources =head1 EXAMPLE: Composed command with multiple input sources
You have a dir with files named as 24 hours in 5 minute intervals: You have a dir with files named as 24 hours in 5 minute intervals:

View file

@ -679,7 +679,7 @@ par_pipe_N1_regexp() {
par_sem_quote() { par_sem_quote() {
echo '### sem --quote should not add empty argument' echo '### sem --quote should not add empty argument'
sem --fg --quote -v echo sem --id sem_quote --fg --quote -v echo
} }
par_halt_on_error_division_by_zero() { par_halt_on_error_division_by_zero() {

View file

@ -453,6 +453,49 @@ par_groupby() {
# Test --colsep --header : (OK: --header : not needed) # Test --colsep --header : (OK: --header : not needed)
} }
par_groupby_pipepart() {
tsv() {
printf "%s\t" a1 b1 c1 d1 e1 f1; echo
seq 100000 999999 | perl -pe '$_=join"\t",split//' |
sort --parallel=8 --buffer-size=50% -rk3
}
export -f tsv
ssv() {
# space separated
tsv | perl -pe '@sep=("\t"," "); s/\t/$sep[rand(2)]/ge;'
}
export -f ssv
cssv() {
# , + space separated
tsv | perl -pe '@sep=("\t"," ",","); s/\t/$sep[rand(2)].$sep[rand(2)]/ge;'
}
export -f cssv
csv() {
# , separated
tsv | perl -pe 's/\t/,/g;'
}
export -f csv
tester() {
generator="$1"
colsep="$2"
groupby="$3"
tmp=`tempfile`
echo "### test $generator | --colsep $colsep --groupby $groupby"
$generator > $tmp
parallel --pipepart -a $tmp --colsep "$colsep" --groupby "$groupby" -k 'echo NewRec; wc'
}
export -f tester
parallel --tag -k tester \
::: tsv ssv cssv csv \
:::+ '\t' '\s+' '[\s,]+' ',' \
::: '3 $_%=2' 3 c1 'c1 $_%=2' 's/^(\d+[\t ,]+){2}(\d+).*/$2/'
}
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 |
parallel -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' parallel -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1'

View file

@ -162,7 +162,7 @@ echo '### Test {#.}'
$XAP -kv -a <(echo a-noext) -a <(echo b-withext.extension) -a <(echo c-ext.gif) echo {3.} {2.} {1.} $XAP -kv -a <(echo a-noext) -a <(echo b-withext.extension) -a <(echo c-ext.gif) echo {3.} {2.} {1.}
echo "### Tests that failed for OO-rewrite" echo "### Tests that failed for OO-rewrite"
parallel -u --semaphore seq 1 10 '|' pv -qL 20; sem --wait; echo done parallel -u --semaphore --id local9 seq 1 10 '|' pv -qL 20; sem --id local9 --wait; echo done
echo a | parallel echo {1} echo a | parallel echo {1}
echo "echo a" | parallel echo "echo a" | parallel
nice parallel -j1 -I :: -X echo 'a::b::^c::[.}c' ::: 1 nice parallel -j1 -I :: -X echo 'a::b::^c::[.}c' ::: 1

View file

@ -647,6 +647,450 @@ par_groupby --block 20 C1 $_%=2 csv , parallel: Warning: A record was longer tha
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 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 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_groupby --block 20 C1 $_%=2 csv , parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby_pipepart tsv \t 3 $_%=2 ### test tsv | --colsep \t --groupby 3 $_%=2
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 1 6 19
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 ### test tsv | --colsep \t --groupby 3
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 1 6 19
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t c1 ### test tsv | --colsep \t --groupby c1
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90001 540006 1170019
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 ### test tsv | --colsep \t --groupby c1 $_%=2
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90001 540006 1170019
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ ### test tsv | --colsep \t --groupby s/^(\d+[\t ,]+){2}(\d+).*/$2/
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 1 6 19
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 ### test ssv | --colsep \s+ --groupby 3 $_%=2
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 1 6 19
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 ### test ssv | --colsep \s+ --groupby 3
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 1 6 19
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 ### test ssv | --colsep \s+ --groupby c1
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90001 540006 1170019
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 ### test ssv | --colsep \s+ --groupby c1 $_%=2
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90001 540006 1170019
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ ### test ssv | --colsep \s+ --groupby s/^(\d+[\t ,]+){2}(\d+).*/$2/
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 1 6 19
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 ### test cssv | --colsep [\s,]+ --groupby 3 $_%=2
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 1 6 25
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 ### test cssv | --colsep [\s,]+ --groupby 3
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 1 6 25
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 ### test cssv | --colsep [\s,]+ --groupby c1
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90001 540006 1710025
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 ### test cssv | --colsep [\s,]+ --groupby c1 $_%=2
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90001 540006 1710025
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ ### test cssv | --colsep [\s,]+ --groupby s/^(\d+[\t ,]+){2}(\d+).*/$2/
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 1 6 25
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart csv , 3 $_%=2 ### test csv | --colsep , --groupby 3 $_%=2
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 1 1 19
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 ### test csv | --colsep , --groupby 3
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 1 1 19
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , c1 ### test csv | --colsep , --groupby c1
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90001 90001 1170019
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 ### test csv | --colsep , --groupby c1 $_%=2
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90001 90001 1170019
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ ### test csv | --colsep , --groupby s/^(\d+[\t ,]+){2}(\d+).*/$2/
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 1 1 19
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_jobslot_repl bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken par_jobslot_repl bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken
par_jobslot_repl 1 par_jobslot_repl 1
par_jobslot_repl 2 par_jobslot_repl 2

View file

@ -369,7 +369,7 @@ echo c-ext b-withext a-noext
c-ext b-withext a-noext c-ext b-withext a-noext
echo "### Tests that failed for OO-rewrite" echo "### Tests that failed for OO-rewrite"
### Tests that failed for OO-rewrite ### Tests that failed for OO-rewrite
parallel -u --semaphore seq 1 10 '|' pv -qL 20; sem --wait; echo done parallel -u --semaphore --id local9 seq 1 10 '|' pv -qL 20; sem --id local9 --wait; echo done
1 1
2 2
3 3

View file

@ -38,6 +38,7 @@ bin/parallel netbsd copy netbsd bin/parallel parallel
bin/parallel openbsd copy openbsd bin/parallel parallel bin/parallel openbsd copy openbsd bin/parallel parallel
bin/parallel freebsd copy freebsd bin/parallel parallel bin/parallel freebsd copy freebsd bin/parallel parallel
bin/parallel debian copy debian bin/parallel parallel bin/parallel debian copy debian bin/parallel parallel
bin/parallel hurd copy hurd bin/parallel parallel
bin/parallel minix copy minix bin/parallel parallel bin/parallel minix copy minix bin/parallel parallel
bin/env_parallel qnx copy qnx bin/env_parallel env_parallel bin/env_parallel qnx copy qnx bin/env_parallel env_parallel
bin/env_parallel pidora copy pidora bin/env_parallel env_parallel bin/env_parallel pidora copy pidora bin/env_parallel env_parallel
@ -63,6 +64,7 @@ bin/env_parallel netbsd copy netbsd bin/env_parallel env_parallel
bin/env_parallel openbsd copy openbsd bin/env_parallel env_parallel bin/env_parallel openbsd copy openbsd bin/env_parallel env_parallel
bin/env_parallel freebsd copy freebsd bin/env_parallel env_parallel bin/env_parallel freebsd copy freebsd bin/env_parallel env_parallel
bin/env_parallel debian copy debian bin/env_parallel env_parallel bin/env_parallel debian copy debian bin/env_parallel env_parallel
bin/env_parallel hurd copy hurd bin/env_parallel env_parallel
bin/env_parallel minix copy minix bin/env_parallel env_parallel bin/env_parallel minix copy minix bin/env_parallel env_parallel
bin/env_parallel.ash qnx copy qnx bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash qnx copy qnx bin/env_parallel.ash env_parallel.ash
bin/env_parallel.ash pidora copy pidora bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash pidora copy pidora bin/env_parallel.ash env_parallel.ash
@ -88,6 +90,7 @@ bin/env_parallel.ash netbsd copy netbsd bin/env_parallel.ash env_parallel.ash
bin/env_parallel.ash openbsd copy openbsd bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash openbsd copy openbsd bin/env_parallel.ash env_parallel.ash
bin/env_parallel.ash freebsd copy freebsd bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash freebsd copy freebsd bin/env_parallel.ash env_parallel.ash
bin/env_parallel.ash debian copy debian bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash debian copy debian bin/env_parallel.ash env_parallel.ash
bin/env_parallel.ash hurd copy hurd bin/env_parallel.ash env_parallel.ash
bin/env_parallel.ash minix copy minix bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash minix copy minix bin/env_parallel.ash env_parallel.ash
bin/env_parallel.bash qnx copy qnx bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash qnx copy qnx bin/env_parallel.bash env_parallel.bash
bin/env_parallel.bash pidora copy pidora bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash pidora copy pidora bin/env_parallel.bash env_parallel.bash
@ -113,6 +116,7 @@ bin/env_parallel.bash netbsd copy netbsd bin/env_parallel.bash env_parallel.bash
bin/env_parallel.bash openbsd copy openbsd bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash openbsd copy openbsd bin/env_parallel.bash env_parallel.bash
bin/env_parallel.bash freebsd copy freebsd bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash freebsd copy freebsd bin/env_parallel.bash env_parallel.bash
bin/env_parallel.bash debian copy debian bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash debian copy debian bin/env_parallel.bash env_parallel.bash
bin/env_parallel.bash hurd copy hurd bin/env_parallel.bash env_parallel.bash
bin/env_parallel.bash minix copy minix bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash minix copy minix bin/env_parallel.bash env_parallel.bash
bin/env_parallel.csh qnx copy qnx bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh qnx copy qnx bin/env_parallel.csh env_parallel.csh
bin/env_parallel.csh pidora copy pidora bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh pidora copy pidora bin/env_parallel.csh env_parallel.csh
@ -138,6 +142,7 @@ bin/env_parallel.csh netbsd copy netbsd bin/env_parallel.csh env_parallel.csh
bin/env_parallel.csh openbsd copy openbsd bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh openbsd copy openbsd bin/env_parallel.csh env_parallel.csh
bin/env_parallel.csh freebsd copy freebsd bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh freebsd copy freebsd bin/env_parallel.csh env_parallel.csh
bin/env_parallel.csh debian copy debian bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh debian copy debian bin/env_parallel.csh env_parallel.csh
bin/env_parallel.csh hurd copy hurd bin/env_parallel.csh env_parallel.csh
bin/env_parallel.csh minix copy minix bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh minix copy minix bin/env_parallel.csh env_parallel.csh
bin/env_parallel.dash qnx copy qnx bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash qnx copy qnx bin/env_parallel.dash env_parallel.dash
bin/env_parallel.dash pidora copy pidora bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash pidora copy pidora bin/env_parallel.dash env_parallel.dash
@ -163,6 +168,7 @@ bin/env_parallel.dash netbsd copy netbsd bin/env_parallel.dash env_parallel.dash
bin/env_parallel.dash openbsd copy openbsd bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash openbsd copy openbsd bin/env_parallel.dash env_parallel.dash
bin/env_parallel.dash freebsd copy freebsd bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash freebsd copy freebsd bin/env_parallel.dash env_parallel.dash
bin/env_parallel.dash debian copy debian bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash debian copy debian bin/env_parallel.dash env_parallel.dash
bin/env_parallel.dash hurd copy hurd bin/env_parallel.dash env_parallel.dash
bin/env_parallel.dash minix copy minix bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash minix copy minix bin/env_parallel.dash env_parallel.dash
bin/env_parallel.fish qnx copy qnx bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish qnx copy qnx bin/env_parallel.fish env_parallel.fish
bin/env_parallel.fish pidora copy pidora bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish pidora copy pidora bin/env_parallel.fish env_parallel.fish
@ -188,6 +194,7 @@ bin/env_parallel.fish netbsd copy netbsd bin/env_parallel.fish env_parallel.fish
bin/env_parallel.fish openbsd copy openbsd bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish openbsd copy openbsd bin/env_parallel.fish env_parallel.fish
bin/env_parallel.fish freebsd copy freebsd bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish freebsd copy freebsd bin/env_parallel.fish env_parallel.fish
bin/env_parallel.fish debian copy debian bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish debian copy debian bin/env_parallel.fish env_parallel.fish
bin/env_parallel.fish hurd copy hurd bin/env_parallel.fish env_parallel.fish
bin/env_parallel.fish minix copy minix bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish minix copy minix bin/env_parallel.fish env_parallel.fish
bin/env_parallel.ksh qnx copy qnx bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh qnx copy qnx bin/env_parallel.ksh env_parallel.ksh
bin/env_parallel.ksh pidora copy pidora bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh pidora copy pidora bin/env_parallel.ksh env_parallel.ksh
@ -213,6 +220,7 @@ bin/env_parallel.ksh netbsd copy netbsd bin/env_parallel.ksh env_parallel.ksh
bin/env_parallel.ksh openbsd copy openbsd bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh openbsd copy openbsd bin/env_parallel.ksh env_parallel.ksh
bin/env_parallel.ksh freebsd copy freebsd bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh freebsd copy freebsd bin/env_parallel.ksh env_parallel.ksh
bin/env_parallel.ksh debian copy debian bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh debian copy debian bin/env_parallel.ksh env_parallel.ksh
bin/env_parallel.ksh hurd copy hurd bin/env_parallel.ksh env_parallel.ksh
bin/env_parallel.ksh minix copy minix bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh minix copy minix bin/env_parallel.ksh env_parallel.ksh
bin/env_parallel.mksh qnx copy qnx bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh qnx copy qnx bin/env_parallel.mksh env_parallel.mksh
bin/env_parallel.mksh pidora copy pidora bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh pidora copy pidora bin/env_parallel.mksh env_parallel.mksh
@ -238,6 +246,7 @@ bin/env_parallel.mksh netbsd copy netbsd bin/env_parallel.mksh env_parallel.mksh
bin/env_parallel.mksh openbsd copy openbsd bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh openbsd copy openbsd bin/env_parallel.mksh env_parallel.mksh
bin/env_parallel.mksh freebsd copy freebsd bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh freebsd copy freebsd bin/env_parallel.mksh env_parallel.mksh
bin/env_parallel.mksh debian copy debian bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh debian copy debian bin/env_parallel.mksh env_parallel.mksh
bin/env_parallel.mksh hurd copy hurd bin/env_parallel.mksh env_parallel.mksh
bin/env_parallel.mksh minix copy minix bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh minix copy minix bin/env_parallel.mksh env_parallel.mksh
bin/env_parallel.pdksh qnx copy qnx bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh qnx copy qnx bin/env_parallel.pdksh env_parallel.pdksh
bin/env_parallel.pdksh pidora copy pidora bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh pidora copy pidora bin/env_parallel.pdksh env_parallel.pdksh
@ -263,6 +272,7 @@ bin/env_parallel.pdksh netbsd copy netbsd bin/env_parallel.pdksh env_parallel.pd
bin/env_parallel.pdksh openbsd copy openbsd bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh openbsd copy openbsd bin/env_parallel.pdksh env_parallel.pdksh
bin/env_parallel.pdksh freebsd copy freebsd bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh freebsd copy freebsd bin/env_parallel.pdksh env_parallel.pdksh
bin/env_parallel.pdksh debian copy debian bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh debian copy debian bin/env_parallel.pdksh env_parallel.pdksh
bin/env_parallel.pdksh hurd copy hurd bin/env_parallel.pdksh env_parallel.pdksh
bin/env_parallel.pdksh minix copy minix bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh minix copy minix bin/env_parallel.pdksh env_parallel.pdksh
bin/env_parallel.sh qnx copy qnx bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh qnx copy qnx bin/env_parallel.sh env_parallel.sh
bin/env_parallel.sh pidora copy pidora bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh pidora copy pidora bin/env_parallel.sh env_parallel.sh
@ -288,6 +298,7 @@ bin/env_parallel.sh netbsd copy netbsd bin/env_parallel.sh env_parallel.sh
bin/env_parallel.sh openbsd copy openbsd bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh openbsd copy openbsd bin/env_parallel.sh env_parallel.sh
bin/env_parallel.sh freebsd copy freebsd bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh freebsd copy freebsd bin/env_parallel.sh env_parallel.sh
bin/env_parallel.sh debian copy debian bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh debian copy debian bin/env_parallel.sh env_parallel.sh
bin/env_parallel.sh hurd copy hurd bin/env_parallel.sh env_parallel.sh
bin/env_parallel.sh minix copy minix bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh minix copy minix bin/env_parallel.sh env_parallel.sh
bin/env_parallel.tcsh qnx copy qnx bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh qnx copy qnx bin/env_parallel.tcsh env_parallel.tcsh
bin/env_parallel.tcsh pidora copy pidora bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh pidora copy pidora bin/env_parallel.tcsh env_parallel.tcsh
@ -313,6 +324,7 @@ bin/env_parallel.tcsh netbsd copy netbsd bin/env_parallel.tcsh env_parallel.tcsh
bin/env_parallel.tcsh openbsd copy openbsd bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh openbsd copy openbsd bin/env_parallel.tcsh env_parallel.tcsh
bin/env_parallel.tcsh freebsd copy freebsd bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh freebsd copy freebsd bin/env_parallel.tcsh env_parallel.tcsh
bin/env_parallel.tcsh debian copy debian bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh debian copy debian bin/env_parallel.tcsh env_parallel.tcsh
bin/env_parallel.tcsh hurd copy hurd bin/env_parallel.tcsh env_parallel.tcsh
bin/env_parallel.tcsh minix copy minix bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh minix copy minix bin/env_parallel.tcsh env_parallel.tcsh
bin/env_parallel.zsh qnx copy qnx bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh qnx copy qnx bin/env_parallel.zsh env_parallel.zsh
bin/env_parallel.zsh pidora copy pidora bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh pidora copy pidora bin/env_parallel.zsh env_parallel.zsh
@ -338,6 +350,7 @@ bin/env_parallel.zsh netbsd copy netbsd bin/env_parallel.zsh env_parallel.zsh
bin/env_parallel.zsh openbsd copy openbsd bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh openbsd copy openbsd bin/env_parallel.zsh env_parallel.zsh
bin/env_parallel.zsh freebsd copy freebsd bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh freebsd copy freebsd bin/env_parallel.zsh env_parallel.zsh
bin/env_parallel.zsh debian copy debian bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh debian copy debian bin/env_parallel.zsh env_parallel.zsh
bin/env_parallel.zsh hurd copy hurd bin/env_parallel.zsh env_parallel.zsh
bin/env_parallel.zsh minix copy minix bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh minix copy minix bin/env_parallel.zsh env_parallel.zsh
bin/parcat qnx copy qnx bin/parcat parcat bin/parcat qnx copy qnx bin/parcat parcat
bin/parcat pidora copy pidora bin/parcat parcat bin/parcat pidora copy pidora bin/parcat parcat
@ -363,6 +376,7 @@ bin/parcat netbsd copy netbsd bin/parcat parcat
bin/parcat openbsd copy openbsd bin/parcat parcat bin/parcat openbsd copy openbsd bin/parcat parcat
bin/parcat freebsd copy freebsd bin/parcat parcat bin/parcat freebsd copy freebsd bin/parcat parcat
bin/parcat debian copy debian bin/parcat parcat bin/parcat debian copy debian bin/parcat parcat
bin/parcat hurd copy hurd bin/parcat parcat
bin/parcat minix copy minix bin/parcat parcat bin/parcat minix copy minix bin/parcat parcat
Done copying Done copying