2017-08-23 7 views
3

パラレル:ベース名は、私は次のように名前のファイルの数百人を、持っている

RG1-t.txt

RG1-n.txt

RG2-t.txt

RG2- n.txtなど

...

私はそれらのスクリプトを実行するためにGNUのパラレルを使用したいが、私はstrug

ls RG*.txt | parallel "command.sh {basename}-t.txt {basename}-n.txt > {basename}.out" 

を RG2.outなど、ファイルRG1.outに任意のアイデアを結果:私が実行できるようにGLEは...などRG1、RG2ので、ファイルのベース名を取得するには?あなたがsedを好む場合は、

ls RG*t.txt | awk -F'-' '{print $1}' | parallel ... 

または::

ls RG*t.txt | cut -d'-' -f1 | parallel 'command.sh {}-t.txt {}-n.txt > {}.out' 

それとも、あなたがawkを好む場合:

答えて

0

は、このようなparallelを供給してみ

ご希望の場合は
ls RG*t.txt | sed 's/-.*//' | parallel ... 

あるいは、 GNU grep

ls RG* | grep -Po '.*(?=-t.txt)' | parallel ... 
0

使用--rpl

printf '%s\0' RG*-n.txt | parallel -0 --rpl '{basename} s/-..txt$//' "command.sh {basename}-t.txt {basename}-n.txt > {basename}.out" 

printfは避け:

bash: /bin/ls: Argument list too long 
0

使用built-in stripping options

  • DIRNAME

      を( {/} )とベースネーム( {%})とカスタムサフィックス( {^suffix}

      $ echo dir/file_1.txt.gz | parallel --plus echo {//} {/} {%_1.txt.gz}

    1. ベース名を取得し、最後に取り外します({.})または任意の({:})拡張子

      $ echo dir.d/file.txt.gz | parallel 'echo {.} {:} {/.} {/:}'

  • を削除し、この必要がありますあなたが必要とするもの:

    ls RG*.txt | parallel "command.sh {.}-t.txt {.}-n.txt > {.}.out" 
    
    関連する問題