PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/usr/local/src/parallel-20231122/src/
Upload File :
Current File : //usr/local/src/parallel-20231122/src/parallel_book.texi
\input texinfo
@setfilename Why_should_you_read_this_book.info

@documentencoding utf-8

@settitle Why should you read this book?

@node Top
@top Why should you read this book?

@menu
* Why should you read this book?::
* Learn GNU Parallel in 5 minutes::
* Learn GNU Parallel in an hour::
* Replacement strings::
* Advanced usage::
@end menu

@node Why should you read this book?
@chapter Why should you read this book?

If you write shell scripts to do the same processing for different
input, then GNU @strong{parallel} will make your life easier and make your
scripts run faster.

The book is written so you get the juicy parts first: The goal is that
you read just enough to get you going. GNU @strong{parallel} has an
overwhelming amount of special features to help in different
situations, and to avoid overloading you with information, the most
used features are presented first.

All the examples are tested in Bash, and most will work in other
shells, too, but there are a few exceptions. So you are recommended to
use Bash while testing out the examples.

@node Learn GNU Parallel in 5 minutes
@chapter Learn GNU Parallel in 5 minutes

You just need to run commands in parallel. You do not care about fine
tuning.

To get going please run this to make some example files:

@verbatim
  # If your system does not have 'seq', replace 'seq' with 'jot'
  seq 5 | parallel seq {} '>' example.{}
@end verbatim

@menu
* Input sources::
* Building the command line::
* Controlling the output::
* Controlling the execution::
* Pipe mode::
* That's it::
@end menu

@node Input sources
@section Input sources

GNU @strong{parallel} reads values from input sources. One input source is
the command line. The values are put after @strong{:::} :

@verbatim
  parallel echo ::: 1 2 3 4 5
@end verbatim

This makes it easy to run the same program on some files:

@verbatim
  parallel wc ::: example.*
@end verbatim

If you give multiple @strong{:::}s, GNU @strong{parallel} will generate all
combinations:

@verbatim
  parallel wc ::: -l -c ::: example.*
@end verbatim

GNU @strong{parallel} can also read the values from stdin (standard input):

@verbatim
  seq 5 | parallel echo
@end verbatim

@node Building the command line
@section Building the command line

The command line is put before the @strong{:::}. It can contain contain a
command and options for the command:

@verbatim
  parallel wc -l ::: example.*
@end verbatim

The command can contain multiple programs. Just remember to quote
characters that are interpreted by the shell (such as @strong{;}):

@verbatim
  parallel echo counting lines';' wc -l ::: example.*
@end verbatim

The value will normally be appended to the command, but can be placed
anywhere by using the replacement string @strong{@{@}}:

@verbatim
  parallel echo counting {}';' wc -l {} ::: example.*
@end verbatim

When using multiple input sources you use the positional replacement
strings @strong{@{1@}} and @strong{@{2@}}:

@verbatim
  parallel echo count {1} in {2}';' wc {1} {2} ::: -l -c ::: example.*
@end verbatim

You can check what will be run with @strong{--dry-run}:

@verbatim
  parallel --dry-run echo count {1} in {2}';' wc {1} {2} ::: -l -c ::: example.*
@end verbatim

This is a good idea to do for every command until you are comfortable
with GNU @strong{parallel}.

@node Controlling the output
@section Controlling the output

The output will be printed as soon as the command completes. This
means the output may come in a different order than the input:

@verbatim
  parallel sleep {}';' echo {} done ::: 5 4 3 2 1
@end verbatim

You can force GNU @strong{parallel} to print in the order of the values with
@strong{--keep-order}/@strong{-k}. This will still run the commands in parallel.
The output of the later jobs will be delayed, until the earlier jobs
are printed:

@verbatim
  parallel -k sleep {}';' echo {} done ::: 5 4 3 2 1
@end verbatim

@node Controlling the execution
@section Controlling the execution

If your jobs are compute intensive, you will most likely run one job
for each core in the system. This is the default for GNU @strong{parallel}.

But sometimes you want more jobs running. You control the number of
job slots with @strong{-j}. Give @strong{-j} the number of jobs to run in
parallel:

@verbatim
  parallel -j50 \
    wget https://ftpmirror.gnu.org/parallel/parallel-{1}{2}22.tar.bz2 \
    ::: 2012 2013 2014 2015 2016 \
    ::: 01 02 03 04 05 06 07 08 09 10 11 12
@end verbatim

@node Pipe mode
@section Pipe mode

GNU @strong{parallel} can also pass blocks of data to commands on stdin
(standard input):

@verbatim
  seq 1000000 | parallel --pipe wc
@end verbatim

This can be used to process big text files. By default GNU @strong{parallel}
splits on \n (newline) and passes a block of around 1 MB to each job.

@node That's it
@section That's it

You have now learned the basic use of GNU @strong{parallel}. This will
probably cover most cases of your use of GNU @strong{parallel}.

The rest of this document will go into more details on each of the
sections and cover special use cases.

@node Learn GNU Parallel in an hour
@chapter Learn GNU Parallel in an hour

In this part we will dive deeper into what you learned in the first 5 minutes.

To get going please run this to make some example files:

@verbatim
  seq 6 > seq6
  seq 6 -1 1 > seq-6
@end verbatim

@menu
* Input sources 1::
* Building the command line 1::
@end menu

@node Input sources 1
@section Input sources

On top of the command line, input sources can also be stdin (standard
input or '-'), files and fifos and they can be mixed. Files are given
after @strong{-a} or @strong{::::}. So these all do the same:

@verbatim
  parallel echo Dice1={1} Dice2={2} ::: 1 2 3 4 5 6 ::: 6 5 4 3 2 1
  parallel echo Dice1={1} Dice2={2} :::: <(seq 6) :::: <(seq 6 -1 1)
  parallel echo Dice1={1} Dice2={2} :::: seq6 seq-6
  parallel echo Dice1={1} Dice2={2} :::: seq6 :::: seq-6
  parallel -a seq6 -a seq-6 echo Dice1={1} Dice2={2}
  parallel -a seq6 echo Dice1={1} Dice2={2} :::: seq-6
  parallel echo Dice1={1} Dice2={2} ::: 1 2 3 4 5 6 :::: seq-6
  cat seq-6 | parallel echo Dice1={1} Dice2={2} :::: seq6 -
@end verbatim

If stdin (standard input) is the only input source, you do not need the '-':

@verbatim
  cat seq6 | parallel echo Dice1={1}
@end verbatim

@menu
* Linking input sources::
@end menu

@node Linking input sources
@subsection Linking input sources

You can link multiple input sources with @strong{:::+} and @strong{::::+}:

@verbatim
  parallel echo {1}={2} ::: I II III IV V VI :::+ 1 2 3 4 5 6
  parallel echo {1}={2} ::: I II III IV V VI ::::+ seq6
@end verbatim

The @strong{:::+} (and @strong{::::+}) will link each value to the corresponding
value in the previous input source, so value number 3 from the first
input source will be linked to value number 3 from the second input
source.

You can combine @strong{:::+} and @strong{:::}, so you link 2 input sources, but
generate all combinations with other input sources:

@verbatim
  parallel echo Dice1={1}={2} Dice2={3}={4} ::: I II III IV V VI ::::+ seq6 \
    ::: VI V IV III II I ::::+ seq-6
@end verbatim

@node Building the command line 1
@section Building the command line

@menu
* The command::
* The replacement strings::
@end menu

@node The command
@subsection The command

The command can be a script, a binary or a Bash function if the
function is exported using @strong{export -f}:

@verbatim
  # Works only in Bash
  my_func() {
    echo in my_func "$1"
  }
  export -f my_func
  parallel my_func ::: 1 2 3
@end verbatim

If the command is complex, it often improves readability to make it
into a function.

@node The replacement strings
@subsection The replacement strings

GNU @strong{parallel} has some replacement strings to make it easier to
refer to the input read from the input sources.

If the input is @strong{mydir/mysubdir/myfile.myext} then:

@verbatim
  {} = mydir/mysubdir/myfile.myext
  {.} = mydir/mysubdir/myfile
  {/} = myfile.myext
  {//} = mydir/mysubdir
  {/.} = myfile
  {#} = the sequence number of the job
  {%} = the job slot number
@end verbatim

When a job is started it gets a sequence number that starts at 1 and
increases by 1 for each new job. The job also gets assigned a slot
number. This number is from 1 to the number of jobs running in
parallel. It is unique between the running jobs, but is re-used as
soon as a job finishes.

@menu
* The positional replacement strings::
@end menu

@node The positional replacement strings
@subsubsection The positional replacement strings

The replacement strings have corresponding positional replacement
strings. If the value from the 3rd input source is
@strong{mydir/mysubdir/myfile.myext}:

@verbatim
  {3} = mydir/mysubdir/myfile.myext
  {3.} = mydir/mysubdir/myfile
  {3/} = myfile.myext
  {3//} = mydir/mysubdir
  {3/.} = myfile
@end verbatim

So the number of the input source is simply prepended inside the @{@}'s.

@node Replacement strings
@chapter Replacement strings

--plus replacement strings

change the replacement string (-I --extensionreplace --basenamereplace --basenamereplace --dirnamereplace --basenameextensionreplace --seqreplace --slotreplace

--header with named replacement string

@{= =@}

Dynamic replacement strings

@menu
* Defining replacement strings::
* Copying environment::
* Controlling the output 1::
* Controlling the execution 1::
* Remote execution::
* Pipe mode 1::
* That's it 1::
@end menu

@node Defining replacement strings
@section Defining replacement strings

@node Copying environment
@section Copying environment

env_parallel

@node Controlling the output 1
@section Controlling the output

@menu
* parset::
@end menu

@node parset
@subsection parset

@strong{parset} is a shell function to get the output from GNU @strong{parallel}
into shell variables.

@strong{parset} is fully supported for @strong{Bash/Zsh/Ksh} and partially supported
for @strong{ash/dash}. I will assume you run @strong{Bash}.

To activate @strong{parset} you have to run:

@verbatim
  . `which env_parallel.bash`
@end verbatim

(replace @strong{bash} with your shell's name).

Then you can run:

@verbatim
  parset a,b,c seq ::: 4 5 6
  echo "$c"
@end verbatim

or:

@verbatim
  parset 'a b c' seq ::: 4 5 6
  echo "$c"
@end verbatim

If you give a single variable, this will become an array:

@verbatim
  parset arr seq ::: 4 5 6
  echo "${arr[1]}"
@end verbatim

@strong{parset} has one limitation: If it reads from a pipe, the output will
be lost.

@verbatim
  echo This will not work | parset myarr echo
  echo Nothing: "${myarr[*]}"
@end verbatim

Instead you can do this:

@verbatim
  echo This will work > tempfile
  parset myarr echo < tempfile
  echo ${myarr[*]}
@end verbatim

sql
cvs

@node Controlling the execution 1
@section Controlling the execution

--dryrun -v

@node Remote execution
@section Remote execution

For this section you must have @strong{ssh} access with no password to 2
servers: @strong{$server1} and @strong{$server2}.

@verbatim
  server1=server.example.com
  server2=server2.example.net
@end verbatim

So you must be able to do this:

@verbatim
  ssh $server1 echo works
  ssh $server2 echo works
@end verbatim

It can be setup by running 'ssh-keygen -t dsa; ssh-copy-id $server1'
and using an empty passphrase. Or you can use @strong{ssh-agent}.

@menu
* Workers::
* --transferfile::
* --return::
* --cleanup::
@end menu

@node Workers
@subsection Workers

@node --transferfile
@subsection --transferfile

@strong{--transferfile} @emph{filename} will transfer @emph{filename} to the
worker. @emph{filename} can contain a replacement string:

@verbatim
  parallel -S $server1,$server2 --transferfile {} wc ::: example.*
  parallel -S $server1,$server2 --transferfile {2} \
     echo count {1} in {2}';' wc {1} {2} ::: -l -c ::: example.*
@end verbatim

A shorthand for @strong{--transferfile @{@}} is @strong{--transfer}.

@node --return
@subsection --return

@node --cleanup
@subsection --cleanup

A shorthand for @strong{--transfer --return @{@} --cleanup} is @strong{--trc @{@}}.

@node Pipe mode 1
@section Pipe mode

--pipepart

@node That's it 1
@section That's it

@node Advanced usage
@chapter Advanced usage

parset fifo, cmd substitution, arrayelements, array with var names and cmds, env_parset

env_parallel

Interfacing with R.

Interfacing with JSON/jq

4dl() @{
  board="$(printf -- '%s' "$@{1@}" | cut -d '/' -f4)"
  thread="$(printf -- '%s' "$@{1@}" | cut -d '/' -f6)"
  wget -qO- "https://a.4cdn.org/$@{board@}/thread/$@{thread@}.json" |
    jq -r '
      .posts
      | map(select(.tim != null))
      | map((.tim | tostring) + .ext)
      | map("https://i.4cdn.org/'"$@{board@}"'/"+.)[]
    ' |
      parallel --gnu -j 0 wget -nv
@}

Interfacing with XML/?

Interfacing with HTML/?

@menu
* Controlling the execution 2::
* Remote execution 1::
@end menu

@node Controlling the execution 2
@section Controlling the execution

--termseq

@node Remote execution 1
@section Remote execution

seq 10 | parallel --sshlogin 'ssh -i "key.pem" a@@b.com' echo

seq 10 | PARALLEL_SSH='ssh -i "key.pem"' parallel --sshlogin a@@b.com echo

seq 10 | parallel --ssh 'ssh -i "key.pem"' --sshlogin a@@b.com echo

ssh-agent

The sshlogin file format

Check if servers are up

@bye