From c25ae9cc8706eaee80be016f23165dbb6a4f8ba9 Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Wed, 22 May 2019 21:57:08 +0200 Subject: [PATCH] parallel: --pipepart --groupby implemented. --- src/parallel | 92 ++-- src/parallel.pod | 16 +- testsuite/tests-to-run/parallel-local-0.3s.sh | 2 +- testsuite/tests-to-run/parallel-local-3s.sh | 43 ++ testsuite/tests-to-run/parallel-local9.sh | 2 +- testsuite/wanted-results/parallel-local-3s | 444 ++++++++++++++++++ testsuite/wanted-results/parallel-local9 | 2 +- testsuite/wanted-results/parallel-polarhome | 14 + 8 files changed, 573 insertions(+), 42 deletions(-) diff --git a/src/parallel b/src/parallel index b50e5c67..54dc1357 100755 --- a/src/parallel +++ b/src/parallel @@ -588,12 +588,12 @@ sub split_positions_for_group_by($$$$) { if(defined $_) { # Not end of file my @F; - if(defined $Global::group_by_column) { + if(defined $group_by::col) { $opt::colsep ||= "\t"; @F = split /$opt::colsep/, $_; - $_ = $F[$Global::group_by_column]; + $_ = $F[$group_by::col]; } - eval $Global::group_by_perlexpr; + eval $group_by::perlexpr; } return ($_,$linepos); } @@ -641,7 +641,7 @@ sub split_positions_for_group_by($$$$) { my @pos; $fh = open_or_exit($file); # 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 $apos = length $header; for(($a,$apos) = value_at($apos); $apos < $size;) { @@ -718,45 +718,67 @@ sub cat_partial($@) { " 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) { +sub column_perlexpr($$$) { + # Compute the column number (if any), perlexpression from combined + # string (such as --shard key, --groupby key, {=n perlexpr=} + # Input: + # $column_perlexpr = string with column and perl expression + # $header = header from input file (if column is column name) + # $colsep = column separator regexp + # 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) - if($groupby =~ s/^(\d+)\s*//) { + if($column_perlexpr =~ s/^(-?\d+)(\s|$)//) { # Column number (possibly prefix) - $col = $1-1; - } elsif($groupby =~ s/^([a-z0-9_]+)\s*//i) { + $col = $1; + } elsif($column_perlexpr =~ s/^([a-z0-9_]+)(\s+|$)//i) { # 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 = split /$colsep/, $header; my %headers; - # Numbered 0..n-1 due to being used by $F[n] - @headers{@headers} = (0..$#headers); + @headers{@headers} = (1..($#headers+1)); $col = $headers{$colname}; 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); } } } - # What is left of $groupby is $perlexpr - $perlexpr = $groupby; - $Global::group_by_perlexpr = $perlexpr; - $Global::group_by_column = $col; + # What is left of $column_perlexpr is $perlexpr (possibly empty) + $perlexpr = $column_perlexpr; + $subref = eval("sub { no strict; no warnings; $perlexpr }"); + 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,'{ local $_=COLVALUE; @@ -768,12 +790,12 @@ sub group_by_loop($) { } }'); - if(defined $col) { - $loop =~ s/COLVALUE/\$F[$col]/g; + if(defined $group_by::col) { + $loop =~ s/COLVALUE/\$F[$group_by::col]/g; } else { $loop =~ s/COLVALUE/\$_/g; } - $loop =~ s/PERLEXPR/$perlexpr/g; + $loop =~ s/PERLEXPR/$group_by::perlexpr/g; $loop =~ s/RECSEP/$recsep/g; return $loop; } @@ -797,7 +819,7 @@ sub group_by_stdin_filter() { push @filter, "-F$sep"; } push @filter, "-pe"; - push @filter, group_by_loop($opt::recstart); + push @filter, group_by_loop(*STDIN,$opt::recstart); ::debug("init", "@filter\n"); open(STDIN, '-|', @filter) || die ("Cannot start @filter"); } diff --git a/src/parallel.pod b/src/parallel.pod index 13b5f864..d3b699a9 100644 --- a/src/parallel.pod +++ b/src/parallel.pod @@ -2155,18 +2155,18 @@ Only supported in B. See also B<--env>, B<--record-env>. -=item B<--shard> I (beta testing) +=item B<--shard> I (beta testing) -Use column I as shard key and shard input to the jobs. +Use column I as shard key and shard input to the jobs. Each input line is split using B<--colsep>. The value in the -I column is hashed so that all lines of a given value is +I column is hashed so that all lines of a given value is given to the same job slot. This is similar to sharding in databases. The performance is in the order of 100K rows per second. Faster if the -I is small (<10), slower if it is big (>100). +I is small (<10), slower if it is big (>100). 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' +=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 You have a dir with files named as 24 hours in 5 minute intervals: diff --git a/testsuite/tests-to-run/parallel-local-0.3s.sh b/testsuite/tests-to-run/parallel-local-0.3s.sh index 4469437f..fe8111bc 100644 --- a/testsuite/tests-to-run/parallel-local-0.3s.sh +++ b/testsuite/tests-to-run/parallel-local-0.3s.sh @@ -679,7 +679,7 @@ par_pipe_N1_regexp() { par_sem_quote() { 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() { diff --git a/testsuite/tests-to-run/parallel-local-3s.sh b/testsuite/tests-to-run/parallel-local-3s.sh index a1956870..17aabc15 100644 --- a/testsuite/tests-to-run/parallel-local-3s.sh +++ b/testsuite/tests-to-run/parallel-local-3s.sh @@ -453,6 +453,49 @@ par_groupby() { # 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_) compgen -A function | grep par_ | LC_ALL=C sort | parallel -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' diff --git a/testsuite/tests-to-run/parallel-local9.sh b/testsuite/tests-to-run/parallel-local9.sh index bafb6149..e0c8a51a 100644 --- a/testsuite/tests-to-run/parallel-local9.sh +++ b/testsuite/tests-to-run/parallel-local9.sh @@ -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.} 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 "echo a" | parallel nice parallel -j1 -I :: -X echo 'a::b::^c::[.}c' ::: 1 diff --git a/testsuite/wanted-results/parallel-local-3s b/testsuite/wanted-results/parallel-local-3s index d2b0b06a..a1eaffad 100644 --- a/testsuite/wanted-results/parallel-local-3s +++ b/testsuite/wanted-results/parallel-local-3s @@ -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 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_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 1 par_jobslot_repl 2 diff --git a/testsuite/wanted-results/parallel-local9 b/testsuite/wanted-results/parallel-local9 index 091bd921..b48317f6 100644 --- a/testsuite/wanted-results/parallel-local9 +++ b/testsuite/wanted-results/parallel-local9 @@ -369,7 +369,7 @@ echo c-ext b-withext a-noext c-ext b-withext a-noext echo "### 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 2 3 diff --git a/testsuite/wanted-results/parallel-polarhome b/testsuite/wanted-results/parallel-polarhome index 4ea9183e..a72d3ec3 100644 --- a/testsuite/wanted-results/parallel-polarhome +++ b/testsuite/wanted-results/parallel-polarhome @@ -38,6 +38,7 @@ bin/parallel netbsd copy netbsd bin/parallel parallel bin/parallel openbsd copy openbsd bin/parallel parallel bin/parallel freebsd copy freebsd 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/env_parallel qnx copy qnx 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 freebsd copy freebsd 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.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 @@ -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 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 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.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 @@ -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 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 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.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 @@ -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 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 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.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 @@ -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 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 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.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 @@ -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 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 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.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 @@ -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 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 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.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 @@ -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 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 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.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 @@ -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 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 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.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 @@ -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 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 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.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 @@ -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 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 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.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 @@ -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 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 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/parcat qnx copy qnx 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 freebsd copy freebsd 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 Done copying