GNU Parallel 中的基本名称
Basename in GNU Parallel
我有几百个文件,命名如下:
RG1-t.txt
RG1-n.txt
RG2-t.txt
RG2-n.txt
等...
我想使用与 运行 脚本并行的 GNU,但我很难获得文件的基本名称,所以 RG1、RG2 等...这样我就可以 运行 :
ls RG*.txt | parallel "command.sh {basename}-t.txt {basename}-n.txt > {basename}.out"
生成文件 RG1.out、RG2.out 等。
有什么想法吗?
尝试像这样喂 parallel
:
ls RG*t.txt | cut -d'-' -f1 | parallel 'command.sh {}-t.txt {}-n.txt > {}.out'
或者,如果您喜欢 awk
:
ls RG*t.txt | awk -F'-' '{print }' | parallel ...
或者,如果您更喜欢 sed
:
ls RG*t.txt | sed 's/-.*//' | parallel ...
或者,如果您更喜欢 GNU grep
:
ls RG* | grep -Po '.*(?=-t.txt)' | parallel ...
使用--rpl
:
printf '%s[=10=]' RG*-n.txt |
parallel -0 --rpl '{basename} s/-..txt$//' "command.sh {basename}-t.txt {basename}-n.txt > {basename}.out"
或动态替换字符串 --plus
:
printf '%s[=11=]' RG*-n.txt |
parallel -0 --plus "command.sh {%-n.txt}-t.txt {} > {%-n.txt}.out"
printf
避免:
bash: /bin/ls: Argument list too long
Dirname ({/}
) and basename ({%}
) and remove custom suffix ({^suffix}
)
$ echo dir/file_1.txt.gz |
parallel --plus echo {//} {/} {%_1.txt.gz}
Get basename, and remove last ({.}
) or any ({:}
) extension
$ echo dir.d/file.txt.gz | parallel 'echo {.} {:} {/.} {/:}'
这应该可以满足您的需要:
ls RG*.txt | parallel "command.sh {.}-t.txt {.}-n.txt > {.}.out"
我有几百个文件,命名如下:
RG1-t.txt
RG1-n.txt
RG2-t.txt
RG2-n.txt
等...
我想使用与 运行 脚本并行的 GNU,但我很难获得文件的基本名称,所以 RG1、RG2 等...这样我就可以 运行 :
ls RG*.txt | parallel "command.sh {basename}-t.txt {basename}-n.txt > {basename}.out"
生成文件 RG1.out、RG2.out 等。 有什么想法吗?
尝试像这样喂 parallel
:
ls RG*t.txt | cut -d'-' -f1 | parallel 'command.sh {}-t.txt {}-n.txt > {}.out'
或者,如果您喜欢 awk
:
ls RG*t.txt | awk -F'-' '{print }' | parallel ...
或者,如果您更喜欢 sed
:
ls RG*t.txt | sed 's/-.*//' | parallel ...
或者,如果您更喜欢 GNU grep
:
ls RG* | grep -Po '.*(?=-t.txt)' | parallel ...
使用--rpl
:
printf '%s[=10=]' RG*-n.txt |
parallel -0 --rpl '{basename} s/-..txt$//' "command.sh {basename}-t.txt {basename}-n.txt > {basename}.out"
或动态替换字符串 --plus
:
printf '%s[=11=]' RG*-n.txt |
parallel -0 --plus "command.sh {%-n.txt}-t.txt {} > {%-n.txt}.out"
printf
避免:
bash: /bin/ls: Argument list too long
Dirname (
{/}
) and basename ({%}
) and remove custom suffix ({^suffix}
)
$ echo dir/file_1.txt.gz | parallel --plus echo {//} {/} {%_1.txt.gz}
Get basename, and remove last (
{.}
) or any ({:}
) extension
$ echo dir.d/file.txt.gz | parallel 'echo {.} {:} {/.} {/:}'
这应该可以满足您的需要:
ls RG*.txt | parallel "command.sh {.}-t.txt {.}-n.txt > {.}.out"