我有一个接受两个文件作为参数的脚本 (
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
等等。
只是一个普通的旧循环。
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-{}
像这样,使用
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