我有数百个文件,命名如下:
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"
Run Code Online (Sandbox Code Playgroud)
导致文件RG1.out,RG2.out等。有什么想法吗?
使用内置的剥离选项:
Dirname(
{/}
)和basename({%}
)并删除自定义后缀({^suffix}
)
$ echo dir/file_1.txt.gz | parallel --plus echo {//} {/} {%_1.txt.gz}
获取基本名称,并删除last(
{.}
)或任何({:}
)扩展名
$ echo dir.d/file.txt.gz | parallel 'echo {.} {:} {/.} {/:}'
这应该可以满足您的需求:
ls RG*.txt | parallel "command.sh {.}-t.txt {.}-n.txt > {.}.out"
Run Code Online (Sandbox Code Playgroud)
尝试parallel
这样喂食:
ls RG*t.txt | cut -d'-' -f1 | parallel 'command.sh {}-t.txt {}-n.txt > {}.out'
Run Code Online (Sandbox Code Playgroud)
或者,如果您愿意awk
:
ls RG*t.txt | awk -F'-' '{print $1}' | parallel ...
Run Code Online (Sandbox Code Playgroud)
或者,如果您愿意sed
:
ls RG*t.txt | sed 's/-.*//' | parallel ...
Run Code Online (Sandbox Code Playgroud)
或者,如果您更喜欢 GNU grep
:
ls RG* | grep -Po '.*(?=-t.txt)' | parallel ...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1100 次 |
最近记录: |