成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何正確的使用GNUParallel-創(chuàng)新互聯(lián)

如何正確的使用GNU Parallel?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設(shè)、成都網(wǎng)站制作與策劃設(shè)計,芒市網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:芒市等地區(qū)。芒市做網(wǎng)站價格咨詢:028-86922220

首先需要做如下準(zhǔn)備:

parallel >= version 20130814

安裝最新版:

(wget -O - pi.dk/3 || curl pi.dk/3/) | bash

這條命令同時也會安裝最新版的指南

man parallel_tutorial

本教程的大部分內(nèi)容同時也兼容舊版本。

abc-file

生成文件:

parallel -k echo ::: A B C > abc-file

def-file

生成文件:

parallel -k echo ::: D E F > def-file

abc0-file

生成文件:

perl -e 'printf "A\0B\0C\0"' > abc0-file

abc_-file

生成文件:

perl -e 'printf "A_B_C_"' > abc_-file

tsv_file.tsv

生成文件:

perl -e 'printf "f1\tf2\nA\tB\nC\tD\n"' > tsv-file.tsv

num30000

生成文件:

perl -e 'for(1..30000){print "$_\n"}' > num30000

num1000000

生成文件:

perl -e 'for(1..1000000){print "$_\n"}' > num1000000

num_%header

生成文件:

(echo %head1; echo %head2; perl -e 'for(1..10){print "$_\n"}') > num_%header

遠(yuǎn)程執(zhí)行:ssh免密碼登錄$SERVER1和$SERVER2

生成文件:

SERVER1=server.example.com
SERVER2=server2.example.net

最后應(yīng)該成功運行如下命令:

ssh $SERVER1 echo works
ssh $SERVER2 echo works

使用 ssh-keygen -t dsa; ssh-copy-id $SERVER1 建立環(huán)境(使用empty pass phrase)

輸入源

GNU Parallel的輸入源支持文件、命令行和標(biāo)準(zhǔn)輸入(stdin或pipe)

單個輸入源

從命令行讀取輸入:

parallel echo ::: A B C

輸出(由于任務(wù)以并行的方式執(zhí)行,順序可能會有所不同):

A
B
C

文件做為輸入源:

parallel -a abc-file echo

輸出同上。

STDIN(標(biāo)準(zhǔn)輸入)做為輸入源:

cat abc-file | parallel echo

輸出同上。

多輸入源

GNU Parallel支持通過命令行指定多個輸入源,它會生成所有的組合:

parallel echo ::: A B C ::: D E F

輸出:

A D
A E
A F
B D
B E
B F
C D
C E
C F

多個文件做為輸入源:

parallel -a abc-file -a def-file echo

輸出同上。

STDIN(標(biāo)準(zhǔn)輸入)可以做為輸入源中的一個,使用“-”:

cat abc-file | parallel -a - -a def-file echo

輸出同上。

可以使用“::::”替代 -a:

cat abc-file | parallel echo :::: - def-file

輸出同上。

::: 和 :::: 可以混合使用:

parallel echo ::: A B C :::: def-file

輸出同上。

適配參數(shù)

–xapply 從每一個輸入源取一個參數(shù):

parallel --xapply echo ::: A B C ::: D E F

輸出:

A D
B E
C F

如果其中一個輸入源的長度比較短,它的值會被重復(fù):

parallel --xapply echo ::: A B C D E ::: F G

輸出:

A F
B G
C F
D G
E F

改變參數(shù)分隔符

GNU Parallel可以指定分隔符替代 ::: 或 ::::,當(dāng)這兩個符號被其它命令占用的時候會特別有用:

parallel --arg-sep ,, echo ,, A B C :::: def-file

輸出:

A D
A E
A F
B D
B E
B F
C D
C E
C F

改變參數(shù)分隔符:

parallel --arg-file-sep // echo ::: A B C // def-file

輸出同上。

改變參數(shù)定界符

GNU Parallel默認(rèn)把一行做為一個參數(shù):使用 \n 做為參數(shù)定界符??梢允褂?-d 改變:

parallel -d _ echo :::: abc_-file

輸出:

A
B
C

\0 代表NULL:

parallel -d '\0' echo :::: abc0-file

輸出同上。

-0 是 -d '\0' 的簡寫(通常用于從 find … -print0讀取輸入):

parallel -0 echo :::: abc0-file

輸出同上。

輸入源中的結(jié)束值

GNU Parallel支持指定一個值做為結(jié)束標(biāo)志:

parallel -E stop echo ::: A B stop C D

輸出:

A
B

跳過空行

使用 –no-run-if-empty 來跳過空行:

(echo 1; echo; echo 2) | parallel --no-run-if-empty echo

輸出:

1
2

構(gòu)建命令行

沒有指定命令意味著參數(shù)就是命令

如果parallel之后沒有給定命令,那么這些參數(shù)會被當(dāng)做命令:

parallel ::: ls 'echo foo' pwd

輸出:

[當(dāng)前文件列表]
foo
[當(dāng)前工作目錄的路徑]

命令可以是一個腳本文件,一個二進制可執(zhí)行文件或一個bash的函數(shù)(須用 export -f 導(dǎo)出函數(shù)):

# Only works in Bash and only if $SHELL=.../bash
my_func() {
 echo in my_func $1
}
export -f my_func
parallel my_func ::: 1 2 3

輸出:

in my_func 1
in my_func 2
in my_func 3

替換字符串

5種替換字符串

GNU Parallel支持多種替換字符串。默認(rèn)使用 {}:

parallel echo ::: A/B.C

輸出:

A/B.C

指定 {} :

parallel echo {} ::: A/B.C

輸出同上

去掉擴展名 {.}:

parallel echo {.} ::: A/B.C

輸出

A/B

去掉路徑 {/}:

parallel echo {/} ::: A/B.C

輸出:

B.C

只保留路徑 {//}:

parallel echo {//} ::: A/B.C

輸出:

A

去掉路徑和擴展名 {/.}:

parallel echo {/.} ::: A/B.C

輸出:

B

輸出任務(wù)編號:

parallel echo {#} ::: A/B.C

輸出:

1
2
3

改變替換字符串

使用 -I 改變替換字符串符號 {}:

parallel -I ,, echo ,, ::: A/B.C

輸出:

A/B.C

–extensionreplace替換 {.}:

parallel --extensionreplace ,, echo ,, ::: A/B.C

輸出:

A/B

–basenamereplace替換 {/}:

parallel --basenamereplace ,, echo ,, ::: A/B.C

輸出:

B.C

–dirnamereplace替換 {//}:

parallel --dirnamereplace ,, echo ,, ::: A/B.C

輸出:

A

–basenameextensionreplace替換 {/.}:

parallel --basenameextensionreplace ,, echo ,, ::: A/B.C

輸出:

B

–seqreplace替換 {#}:

parallel --seqreplace ,, echo ,, ::: A B C

輸出:

1
2
3

指定位置替換字符串

如果有多個輸入源時,可以通過 {編號} 指定某一個輸入源的參數(shù):

parallel echo {1} and {2} ::: A B ::: C D

輸出:

A and C
A and D
B and C
B and D

可以使用 / // /. 和 .: 改變指定替換字符串:

parallel echo /={1/} //={1//} /.={1/.} .={1.} ::: A/B.C D/E.F

輸出:

/=B.C //=A /.=B .=A/B
/=E.F //=D /.=E .=D/E

位置可以是負(fù)數(shù),表示倒著數(shù):

parallel echo 1={1} 2={2} 3={3} -1={-1} -2={-2} -3={-3} ::: A B ::: C D ::: E F

輸出:

1=A 2=C 3=E -1=E -2=C -3=A
1=A 2=C 3=F -1=F -2=C -3=A
1=A 2=D 3=E -1=E -2=D -3=A
1=A 2=D 3=F -1=F -2=D -3=A
1=B 2=C 3=E -1=E -2=C -3=B
1=B 2=C 3=F -1=F -2=C -3=B
1=B 2=D 3=E -1=E -2=D -3=B
1=B 2=D 3=F -1=F -2=D -3=B

按列輸入

使用 –colsep 把文件中的行切分為列,做為輸入?yún)?shù)。下面使用TAB(\t):

1=f1 2=f2
1=A 2=B
1=C 2=D

指定參數(shù)名

使用 –header 把每一行輸入中的第一個值做為參數(shù)名:

parallel --header : echo f1={f1} f2={f2} ::: f1 A B ::: f2 C D

輸出:

f1=A f2=C
f1=A f2=D
f1=B f2=C
f1=B f2=D

使用 –colsep 處理使用TAB做為分隔符的文件:

parallel --header : --colsep '\t' echo f1={f1} f2={f2} :::: tsv-file.tsv

輸出:

f1=A f2=B
f1=C f2=D

多參數(shù)

–xargs 讓GNU Parallel支持一行多個參數(shù)(可以指定上限):

cat num30000 | parallel --xargs echo | wc -l

輸出:

2

30000個參數(shù)被分為兩行。

一行中的參數(shù)個數(shù)的上限通過 -s 指定。下面指定大長度是10000,會被分為17行:

cat num30000 | parallel --xargs -s 10000 echo | wc -l

為了獲得更好的并發(fā)性,GNU Parallel會在文件讀取結(jié)束后再分發(fā)參數(shù)。

GNU Parallel 在讀取完最后一個參數(shù)之后,才開始第二個任務(wù),此時會把所有的參數(shù)平均分配到4個任務(wù)(如果指定了4個任務(wù))。

第一個任務(wù)與上面使用 –xargs 的例子一樣,但是第二個任務(wù)會被平均的分成4個任務(wù),最終一共5個任務(wù)。

cat num30000 | parallel --jobs 4 -m echo | wc -l

輸出:

5

10分參數(shù)分配到4個任務(wù)可以看得更清晰:

parallel --jobs 4 -m echo ::: {1..10}

輸出:

1 2 3
4 5 6
7 8 9
10

替換字符串可以是單詞的一部分。通過下面兩個命令體會 -m 和 -X 的區(qū)別:

parallel --jobs 4 -m echo pre-{}-post ::: A B C D E F G

輸出:

pre-A B-post
pre-C D-post
pre-E F-post
pre-G-post

-X與 -m 相反:

parallel --jobs 4 -X echo pre-{}-post ::: A B C D E F G


輸出:

pre-A-post pre-B-post
pre-C-post pre-D-post
pre-E-post pre-F-post
pre-G-post

使用 -N 限制每行參數(shù)的個數(shù):

parallel -N3 echo ::: A B C D E F G H

輸出:

A B C
D E F
G H

-N也可以用于指定位置替換字符串:

parallel -N3 echo 1={1} 2={2} 3={3} ::: A B C D E F G H

輸出:

1=A 2=B 3=C
1=D 2=E 3=F
1=G 2=H 3=

-N0 只讀取一個參數(shù),但不附加:

parallel -N0 echo foo ::: 1 2 3

輸出:

foo
foo
foo

引用

如果命令行中包含特殊字符,就需要使用引號保護起來。

perl腳本 'print “@ARGV\n”' 與linux的 echo 的功能一樣。

perl -e 'print "@ARGV\n"' A

輸出:

A

使用GNU Parallel運行這條命令的時候,perl命令需要用引號包起來:

parallel perl -e 'print "@ARGV\n"' ::: This wont work

輸出:

[Nothing]

使用 -q 保護perl命令:

parallel -q perl -e 'print "@ARGV\n"' ::: This works

輸出:

This
works

也可以使用 ' :

parallel perl -e \''print "@ARGV\n"'\' ::: This works, too

輸出:

This
works,
too

使用 -quote:

parallel --shellquote
parallel: Warning: Input is read from the terminal. Only experts do this on purpose. Press CTRL-D to exit.
perl -e 'print "@ARGV\n"'
[CTRL-D]

輸出:

perl\ -e\ \'print\ \"@ARGV\\n\"\'

也可以使用命令:

parallel perl\ -e\ \'print\ \"@ARGV\\n\"\' ::: This also works

輸出:

This
also
works

去除空格

使用 –trim 去除參數(shù)兩頭的空格:

parallel --trim r echo pre-{}-post ::: ' A '

輸出:

pre- A-post

刪除左邊的空格:

parallel --trim l echo pre-{}-post ::: ' A '

輸出:

pre-A -post

刪除兩邊的空格:

parallel --trim lr echo pre-{}-post ::: ' A '

輸出:

pre-A-post

控制輸出

以參數(shù)做為輸出前綴:

parallel --tag echo foo-{} ::: A B C

輸出:

A       foo-A
B       foo-B
C       foo-C

修改輸出前綴 –tagstring:

parallel --tagstring {}-bar echo foo-{} ::: A B C

輸出:

 A-bar       foo-A

關(guān)于如何正確的使用GNU Parallel問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

分享文章:如何正確的使用GNUParallel-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://jinyejixie.com/article44/jgihe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計App開發(fā)、移動網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、手機網(wǎng)站建設(shè)、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
嘉禾县| 卢湾区| 临西县| 长乐市| 抚顺县| 望江县| 温州市| 孙吴县| 上杭县| 兴化市| 准格尔旗| 疏附县| 宁波市| 汕尾市| 南昌市| 汽车| 榕江县| 石渠县| 安远县| 固阳县| 中江县| 普兰店市| 金沙县| 卓资县| 沙坪坝区| 宣武区| 广德县| 屏南县| 石门县| 桐梓县| 三门县| 平潭县| 郸城县| 韶关市| 水城县| 都匀市| 毕节市| 岑巩县| 富源县| 浠水县| 宁武县|