将文件名传递给脚本,该脚本采用多个参数,这些参数是使用 xargs 修改的输入文件的名称

问题描述 投票:0回答:2

我有一个接受两个文件作为参数的脚本 (

run_this file1 file2
)。我有一堆我选择的文件

ls analysis-{A,B,C}*-[123][abc].csv

对于其中的每一个,我还需要传递相应的文件,该文件仅在名称上有所不同前缀:而不是

analysis
,它以
analysis_q
开头。我尝试了很多我知道的选择,但
sed
似乎拒绝与
xargs
合作(我不知道其他简单的方法)

我尝试过的事情之一:

ls analysis-{A,B,C}*-[123][abc].csv | xargs --interactive -I '{}' run_this `$(echo {} | sed 's/analysis/analysis_q/g')` {}

我希望生产

run_this analysis_q-A-1a.csv analysis-A-1a.csv
run_this analysis_q-A-1b.csv analysis-A-1b.csv

等等。

linux bash shell sed xargs
2个回答
0
投票

只是一个普通的旧循环。

for f1 in analysis-{A,B,C}*-[123][abc].csv; do
    f2=$(sed 's/analysis/analysis_q/g' <<<"$f1")
    run_this "$f1" "$f2"
done

对于 xargs,我会删除前缀并仅使用变量部分。

printf "%s\n" analysis-{A,B,C}*-[123][abc].csv |
sed 's/^analysis-//' |
xargs --interactive -I {} run_this analysis-{} analysis_q-{}

0
投票

像这样,使用

sed
xargs

printf '%s\n' analysis-A-1*.csv |
    sed -E 's/^(analysis)(.*)/\1_q\2 \1\2/' |
    xargs -n2 echo run_this

当您对输出感到满意时,删除

echo

输出
run_this analysis_q-A-1a.csv analysis-A-1a.csv
run_this analysis_q-A-1b.csv analysis-A-1b.csv
© www.soinside.com 2019 - 2024. All rights reserved.