#!/bin/bash -e # warning: derived file, from net2sh set -a dir=$PWD work_dir=$dir/.net.$$ prog_dir=`dirname "$(readlink -f "$0")"` prog=${0##*/} prog_stem=${prog%%.*} conf=$prog_stem.conf conf_file_var=${prog_stem}_conf PATH="$prog_dir:$prog_dir/sub:$prog_dir/use:$PATH" PERL5LIB="$prog_dir:$prog_dir/perl:$PERL5LIB" for C in "$prog_dir/$conf" "/etc/default/$prog" "/etc/$conf" "$HOME/.config/$conf" "./$conf" "${!conf_file_var}"; do if [ -e "$C" ]; then . "$C"; fi done . opts _subs= trap ' kill -TERM $_subs 2>/dev/null wait trap - EXIT find "$work_dir" \( -type p -o -type l \) -print0 | xargs --no-run-if-empty -0 rm -f rmdir "$work_dir" exit ' HUP INT QUIT TERM PIPE EXIT mkdir "$work_dir" set +e # sort - parallel mergesort for 8 cores # Net [ $# = 0 ] || { echo >&2 usage: "$prog "; exit 2; } cd "$work_dir" mkfifo in out i0 i1 i2 i3 i4 i5 i6 i7 o0 o1 o2 o3 o4 o5 o6 o7 m0 m1 m2 m3 m4 m5 cat <&0 >in & _subs="$_subs $!" # input cat &1 & _subs="$_subs $!" # output split_lines o0 & _subs="$_subs $!" # sort0 sort -s o1 & _subs="$_subs $!" # sort1 sort -s o2 & _subs="$_subs $!" # sort2 sort -s o3 & _subs="$_subs $!" # sort3 sort -s o4 & _subs="$_subs $!" # sort4 sort -s o5 & _subs="$_subs $!" # sort5 sort -s o6 & _subs="$_subs $!" # sort6 sort -s o7 & _subs="$_subs $!" # sort7 sort -m o0 o1 >m0 & _subs="$_subs $!" # merge0 sort -m o2 o3 >m1 & _subs="$_subs $!" # merge1 sort -m o4 o5 >m2 & _subs="$_subs $!" # merge2 sort -m o6 o7 >m3 & _subs="$_subs $!" # merge3 sort -m m0 m1 >m4 & _subs="$_subs $!" # merge4 sort -m m2 m3 >m5 & _subs="$_subs $!" # merge5 sort -m m4 m5 >out & _subs="$_subs $!" # merge6 wait