mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 14:07:55 +00:00
parallel: {choose_k} added to --plus.
This commit is contained in:
parent
68114b93e7
commit
f09e0384ff
12
README
12
README
|
@ -44,9 +44,9 @@ document.
|
||||||
|
|
||||||
Full installation of GNU Parallel is as simple as:
|
Full installation of GNU Parallel is as simple as:
|
||||||
|
|
||||||
wget http://ftpmirror.gnu.org/parallel/parallel-20170822.tar.bz2
|
wget http://ftpmirror.gnu.org/parallel/parallel-20170922.tar.bz2
|
||||||
bzip2 -dc parallel-20170822.tar.bz2 | tar xvf -
|
bzip2 -dc parallel-20170922.tar.bz2 | tar xvf -
|
||||||
cd parallel-20170822
|
cd parallel-20170922
|
||||||
./configure && make && sudo make install
|
./configure && make && sudo make install
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,9 +55,9 @@ Full installation of GNU Parallel is as simple as:
|
||||||
If you are not root you can add ~/bin to your path and install in
|
If you are not root you can add ~/bin to your path and install in
|
||||||
~/bin and ~/share:
|
~/bin and ~/share:
|
||||||
|
|
||||||
wget http://ftpmirror.gnu.org/parallel/parallel-20170822.tar.bz2
|
wget http://ftpmirror.gnu.org/parallel/parallel-20170922.tar.bz2
|
||||||
bzip2 -dc parallel-20170822.tar.bz2 | tar xvf -
|
bzip2 -dc parallel-20170922.tar.bz2 | tar xvf -
|
||||||
cd parallel-20170822
|
cd parallel-20170922
|
||||||
./configure --prefix=$HOME && make && make install
|
./configure --prefix=$HOME && make && make install
|
||||||
|
|
||||||
Or if your system lacks 'make' you can simply copy src/parallel
|
Or if your system lacks 'make' you can simply copy src/parallel
|
||||||
|
|
20
configure
vendored
20
configure
vendored
|
@ -1,6 +1,6 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.69 for parallel 20170822.
|
# Generated by GNU Autoconf 2.69 for parallel 20170922.
|
||||||
#
|
#
|
||||||
# Report bugs to <bug-parallel@gnu.org>.
|
# Report bugs to <bug-parallel@gnu.org>.
|
||||||
#
|
#
|
||||||
|
@ -579,8 +579,8 @@ MAKEFLAGS=
|
||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='parallel'
|
PACKAGE_NAME='parallel'
|
||||||
PACKAGE_TARNAME='parallel'
|
PACKAGE_TARNAME='parallel'
|
||||||
PACKAGE_VERSION='20170822'
|
PACKAGE_VERSION='20170922'
|
||||||
PACKAGE_STRING='parallel 20170822'
|
PACKAGE_STRING='parallel 20170922'
|
||||||
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
|
@ -1214,7 +1214,7 @@ if test "$ac_init_help" = "long"; then
|
||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures parallel 20170822 to adapt to many kinds of systems.
|
\`configure' configures parallel 20170922 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
|
@ -1281,7 +1281,7 @@ fi
|
||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of parallel 20170822:";;
|
short | recursive ) echo "Configuration of parallel 20170922:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
|
@ -1357,7 +1357,7 @@ fi
|
||||||
test -n "$ac_init_help" && exit $ac_status
|
test -n "$ac_init_help" && exit $ac_status
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
parallel configure 20170822
|
parallel configure 20170922
|
||||||
generated by GNU Autoconf 2.69
|
generated by GNU Autoconf 2.69
|
||||||
|
|
||||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||||
|
@ -1374,7 +1374,7 @@ cat >config.log <<_ACEOF
|
||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by parallel $as_me 20170822, which was
|
It was created by parallel $as_me 20170922, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
|
@ -2237,7 +2237,7 @@ fi
|
||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE='parallel'
|
PACKAGE='parallel'
|
||||||
VERSION='20170822'
|
VERSION='20170922'
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
@ -2880,7 +2880,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
# values after options handling.
|
# values after options handling.
|
||||||
ac_log="
|
ac_log="
|
||||||
This file was extended by parallel $as_me 20170822, which was
|
This file was extended by parallel $as_me 20170922, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
|
@ -2942,7 +2942,7 @@ _ACEOF
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
parallel config.status 20170822
|
parallel config.status 20170922
|
||||||
configured by $0, generated by GNU Autoconf 2.69,
|
configured by $0, generated by GNU Autoconf 2.69,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
AC_INIT([parallel], [20170822], [bug-parallel@gnu.org])
|
AC_INIT([parallel], [20170922], [bug-parallel@gnu.org])
|
||||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
|
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
|
|
|
@ -198,20 +198,26 @@ to:parallel@gnu.org, bug-parallel@gnu.org
|
||||||
stable-bcc: Jesse Alama <jessealama@fastmail.fm>
|
stable-bcc: Jesse Alama <jessealama@fastmail.fm>
|
||||||
|
|
||||||
|
|
||||||
Subject: GNU Parallel 20170922 ('Harvey/Peter Madsen') released <<[stable]>>
|
Subject: GNU Parallel 20170922 ('Mexico City') released <<[stable]>>
|
||||||
|
|
||||||
GNU Parallel 20170922 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
|
GNU Parallel 20170922 ('Mexico City') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
|
||||||
|
|
||||||
<<No new functionality was introduced so this is a good candidate for a stable release.>>
|
<<No new functionality was introduced so this is a good candidate for a stable release.>>
|
||||||
|
|
||||||
Haiku of the month:
|
Haiku of the month:
|
||||||
|
|
||||||
<<>>
|
--limit can
|
||||||
-- Ole Tange
|
limit jobs dynamic'ly
|
||||||
|
given a command
|
||||||
|
--ole-tange
|
||||||
|
|
||||||
New in this release:
|
New in this release:
|
||||||
|
|
||||||
https://til.hashrocket.com/posts/ggt1jaes4y-download-all-of-humble-bundle-books-in-parallel
|
* Use '--limit myprog' to make a dynamic job limit. Just return 0 to spawn another job, 1 to not spawn another job, and 2 to kill the youngest job.
|
||||||
|
|
||||||
|
* PARALLEL_RSYNC_OPTS and --rsync-opts sets the options for rsync (Default: -rlDzR).
|
||||||
|
|
||||||
|
* Download all of humble bundle books in parallel https://til.hashrocket.com/posts/ggt1jaes4y-download-all-of-humble-bundle-books-in-parallel
|
||||||
|
|
||||||
<<Citation not OK: BAMClipper: removing primers from alignments to minimize false-negative mutations in amplicon next-generation sequencing https://www.nature.com/articles/s41598-017-01703-6>>
|
<<Citation not OK: BAMClipper: removing primers from alignments to minimize false-negative mutations in amplicon next-generation sequencing https://www.nature.com/articles/s41598-017-01703-6>>
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
use strict;
|
use strict;
|
||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
$Global::progname="niceload";
|
$Global::progname="niceload";
|
||||||
$Global::version = 20170822;
|
$Global::version = 20170922;
|
||||||
Getopt::Long::Configure("bundling","require_order");
|
Getopt::Long::Configure("bundling","require_order");
|
||||||
get_options_from_array(\@ARGV) || die_usage();
|
get_options_from_array(\@ARGV) || die_usage();
|
||||||
if($opt::version) {
|
if($opt::version) {
|
||||||
|
|
10
src/parallel
10
src/parallel
|
@ -1381,7 +1381,7 @@ sub check_invalid_option_combinations {
|
||||||
|
|
||||||
sub init_globals {
|
sub init_globals {
|
||||||
# Defaults:
|
# Defaults:
|
||||||
$Global::version = 20170822;
|
$Global::version = 20170922;
|
||||||
$Global::progname = 'parallel';
|
$Global::progname = 'parallel';
|
||||||
$Global::infinity = 2**31;
|
$Global::infinity = 2**31;
|
||||||
$Global::debug = 0;
|
$Global::debug = 0;
|
||||||
|
@ -1415,6 +1415,7 @@ sub init_globals {
|
||||||
'{...}' => 's:\.[^/.]+$::; s:\.[^/.]+$::; s:\.[^/.]+$::',
|
'{...}' => 's:\.[^/.]+$::; s:\.[^/.]+$::; s:\.[^/.]+$::',
|
||||||
'{/..}' => 's:.*/::; s:\.[^/.]+$::; s:\.[^/.]+$::',
|
'{/..}' => 's:.*/::; s:\.[^/.]+$::; s:\.[^/.]+$::',
|
||||||
'{/...}' => 's:.*/::; s:\.[^/.]+$::; s:\.[^/.]+$::; s:\.[^/.]+$::',
|
'{/...}' => 's:.*/::; s:\.[^/.]+$::; s:\.[^/.]+$::; s:\.[^/.]+$::',
|
||||||
|
'{choose_k}' => 'for $t (2..$#arg){ if($arg[$t-1] ge $arg[$t]) { skip() } }',
|
||||||
# {##} = number of jobs
|
# {##} = number of jobs
|
||||||
'{##}' => '$_=total_jobs()',
|
'{##}' => '$_=total_jobs()',
|
||||||
# Bash ${a:-myval}
|
# Bash ${a:-myval}
|
||||||
|
@ -2925,7 +2926,7 @@ sub progress {
|
||||||
# $pctcomplete = percent of jobs completed
|
# $pctcomplete = percent of jobs completed
|
||||||
# $avgtime = averaged time
|
# $avgtime = averaged time
|
||||||
# $eta = smoothed eta
|
# $eta = smoothed eta
|
||||||
$total ||= $Global::JobQueue->total_jobs();
|
$total = $Global::JobQueue->total_jobs();
|
||||||
my $completed = $Global::total_completed;
|
my $completed = $Global::total_completed;
|
||||||
my $left = $total - $completed;
|
my $left = $total - $completed;
|
||||||
if(not $completed) {
|
if(not $completed) {
|
||||||
|
@ -5156,7 +5157,7 @@ sub limit {
|
||||||
my ($cmd,@args) = split /\s+/,$opt::limit;
|
my ($cmd,@args) = split /\s+/,$opt::limit;
|
||||||
if($limitscripts{$cmd}) {
|
if($limitscripts{$cmd}) {
|
||||||
my $tmpfile = ::tmpname("parlmt");
|
my $tmpfile = ::tmpname("parlmt");
|
||||||
$Global::unlink{$tmpfile};
|
++$Global::unlink{$tmpfile};
|
||||||
$self->{'limitscript'} =
|
$self->{'limitscript'} =
|
||||||
::spacefree(1, sprintf($limitscripts{$cmd},
|
::spacefree(1, sprintf($limitscripts{$cmd},
|
||||||
::multiply_binary_prefix(@args),$tmpfile));
|
::multiply_binary_prefix(@args),$tmpfile));
|
||||||
|
@ -9832,7 +9833,8 @@ sub new {
|
||||||
if($posrpl =~ s/^\{//) {
|
if($posrpl =~ s/^\{//) {
|
||||||
# Only do this if the shorthand start with {
|
# Only do this if the shorthand start with {
|
||||||
$prefix=~s/^\{//;
|
$prefix=~s/^\{//;
|
||||||
while(s{( (?: ^|\257> ) (?: (?! \257[<>]). )*? ) # Don't replace after \257 unless \257>
|
# Don't replace after \257 unless \257>
|
||||||
|
while(s{( (?: ^|\257> ) (?: (?! \257[<>]). )*? )
|
||||||
\{(-?\d+) \s* \Q$prefix\E $grp_regexp \Q$postfix\E}
|
\{(-?\d+) \s* \Q$prefix\E $grp_regexp \Q$postfix\E}
|
||||||
{
|
{
|
||||||
# The start remains the same
|
# The start remains the same
|
||||||
|
|
|
@ -1328,6 +1328,11 @@ Activate additional replacement strings: {+/} {+.} {+..} {+...} {..}
|
||||||
B<{##}> is the number of jobs to be run. It is incompatible with
|
B<{##}> is the number of jobs to be run. It is incompatible with
|
||||||
B<-X>/B<-m>/B<--xargs>.
|
B<-X>/B<-m>/B<--xargs>.
|
||||||
|
|
||||||
|
B<{choose_k}> is inspired by n choose k: Given a list of n elements,
|
||||||
|
choose k. k is the number of input sources and n is the number of
|
||||||
|
arguments in an input source. The content of the input sources must
|
||||||
|
be the same and the arguments must be unique.
|
||||||
|
|
||||||
The following dynamic replacement strings are also activated. They are
|
The following dynamic replacement strings are also activated. They are
|
||||||
inspired by bash's parameter expansion:
|
inspired by bash's parameter expansion:
|
||||||
|
|
||||||
|
@ -3098,6 +3103,24 @@ This also works if the input file is a file with columns:
|
||||||
parallel --colsep '\t' --header : echo {Name} {E-mail address}
|
parallel --colsep '\t' --header : echo {Name} {E-mail address}
|
||||||
|
|
||||||
|
|
||||||
|
=head1 EXAMPLE: All combinations in a list
|
||||||
|
|
||||||
|
GNU B<parallel> makes all combinations when given two lists.
|
||||||
|
|
||||||
|
To make all combinations in a single list with unique values, you
|
||||||
|
repeat the list and use replacement string with a Perl expression that
|
||||||
|
skips the job if the value from input source 1 is greater than or
|
||||||
|
equal to the value from input source 2:
|
||||||
|
|
||||||
|
parallel echo {= 'if($arg[1] ge $arg[2]) { skip() }' =} ::: A B C D ::: A B C D
|
||||||
|
|
||||||
|
Or more generally:
|
||||||
|
|
||||||
|
parallel echo \
|
||||||
|
'{= for $t (2..$#arg){ if($arg[$t-1] ge $arg[$t]) { skip() } } =}' \
|
||||||
|
::: A B C D ::: A B C D ::: A B C D
|
||||||
|
|
||||||
|
|
||||||
=head1 EXAMPLE: From a to b and b to c
|
=head1 EXAMPLE: From a to b and b to c
|
||||||
|
|
||||||
Assume you have input like:
|
Assume you have input like:
|
||||||
|
|
|
@ -1269,20 +1269,6 @@ The failed commands can be resumed with:
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
|
||||||
=head2 DIFFERENCES BETWEEN k-bx/par AND GNU Parallel
|
|
||||||
|
|
||||||
kbx requires Haskell to work. This limits the number of platforms this
|
|
||||||
can work on.
|
|
||||||
|
|
||||||
Todo https://github.com/k-bx/par
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=head2 DIFFERENCES BETWEEN machma AND GNU Parallel
|
|
||||||
|
|
||||||
Todo. Requires Go >= 1.7.
|
|
||||||
|
|
||||||
|
|
||||||
=head2 DIFFERENCES BETWEEN ClusterSSH AND GNU Parallel
|
=head2 DIFFERENCES BETWEEN ClusterSSH AND GNU Parallel
|
||||||
|
|
||||||
ClusterSSH solves a different problem than GNU B<parallel>.
|
ClusterSSH solves a different problem than GNU B<parallel>.
|
||||||
|
@ -1303,6 +1289,24 @@ GNU B<parallel> can be used as a poor-man's version of ClusterSSH:
|
||||||
B<parallel --nonall -S server-a,server-b do_stuff foo bar>
|
B<parallel --nonall -S server-a,server-b do_stuff foo bar>
|
||||||
|
|
||||||
|
|
||||||
|
=head2 Todo
|
||||||
|
|
||||||
|
machma. Requires Go >= 1.7.
|
||||||
|
|
||||||
|
https://github.com/k-bx/par requires Haskell to work. This limits the
|
||||||
|
number of platforms this can work on.
|
||||||
|
|
||||||
|
https://github.com/otonvm/Parallel
|
||||||
|
|
||||||
|
https://github.com/flesler/parallel
|
||||||
|
|
||||||
|
https://github.com/kou1okada/lesser-parallel
|
||||||
|
|
||||||
|
https://github.com/Julian/Verge
|
||||||
|
|
||||||
|
https://github.com/amattn/paral
|
||||||
|
|
||||||
|
|
||||||
=head1 TESTING OTHER TOOLS
|
=head1 TESTING OTHER TOOLS
|
||||||
|
|
||||||
There are certain issues that are very common on parallelizing
|
There are certain issues that are very common on parallelizing
|
||||||
|
|
2
src/sql
2
src/sql
|
@ -576,7 +576,7 @@ $Global::Initfile && unlink $Global::Initfile;
|
||||||
exit ($err);
|
exit ($err);
|
||||||
|
|
||||||
sub parse_options {
|
sub parse_options {
|
||||||
$Global::version = 20170822;
|
$Global::version = 20170922;
|
||||||
$Global::progname = 'sql';
|
$Global::progname = 'sql';
|
||||||
|
|
||||||
# This must be done first as this may exec myself
|
# This must be done first as this may exec myself
|
||||||
|
|
|
@ -124,8 +124,15 @@ par_remote_symlink_dir() {
|
||||||
ssh parallel@lo 'mkdir -p tmp; rm -rf wd; ln -s tmp wd'
|
ssh parallel@lo 'mkdir -p tmp; rm -rf wd; ln -s tmp wd'
|
||||||
mkdir -p wd
|
mkdir -p wd
|
||||||
touch wd/testfile
|
touch wd/testfile
|
||||||
|
parallel --nonall --rsync-opts '--keep-dirlinks -rlDzR' -S parallel@lo --basefile wd/testfile
|
||||||
|
ssh parallel@lo rm wd && echo OK: wd is still a symlink with --rsync-opts
|
||||||
|
|
||||||
|
ssh parallel@lo 'mkdir -p tmp; rm -rf wd; ln -s tmp wd'
|
||||||
|
mkdir -p wd
|
||||||
|
touch wd/testfile
|
||||||
|
export PARALLEL_RSYNC_OPTS='--keep-dirlinks -rlDzR'
|
||||||
parallel --nonall -S parallel@lo --basefile wd/testfile
|
parallel --nonall -S parallel@lo --basefile wd/testfile
|
||||||
ssh parallel@lo rm wd && echo OK: wd is still a symlink
|
ssh parallel@lo rm wd && echo OK: wd is still a symlink with PARALLEL_RSYNC_OPTS
|
||||||
}
|
}
|
||||||
|
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
|
|
|
@ -24,7 +24,8 @@ par_read_sshloginfile_from_stdin foo
|
||||||
par_read_sshloginfile_from_stdin /home/parallel
|
par_read_sshloginfile_from_stdin /home/parallel
|
||||||
par_read_sshloginfile_from_stdin foo
|
par_read_sshloginfile_from_stdin foo
|
||||||
par_remote_symlink_dir bug #51293: parallel does not preserve symlinked directory structure on remote
|
par_remote_symlink_dir bug #51293: parallel does not preserve symlinked directory structure on remote
|
||||||
par_remote_symlink_dir OK: wd is still a symlink
|
par_remote_symlink_dir OK: wd is still a symlink with --rsync-opts
|
||||||
|
par_remote_symlink_dir OK: wd is still a symlink with PARALLEL_RSYNC_OPTS
|
||||||
par_test_nonall ### Test --nonall
|
par_test_nonall ### Test --nonall
|
||||||
par_test_nonall /home/csh
|
par_test_nonall /home/csh
|
||||||
par_test_nonall /home/parallel
|
par_test_nonall /home/parallel
|
||||||
|
|
Loading…
Reference in a new issue