我处理实验数据,其中文件名使用以下形式的主题和会话进行编码:
sub-01_ses-01_blabla.txt
我经常发现自己使用以下循环遍历主题和会话:
template="sub-01_ses-01_blabla.txt"
for subject in {1..3}; do
for session in {1..2}; do
newname=$(echo $template | \
sed "s/sub-01/sub-$(printf "%02d" $subject)/g" | \
sed "s/ses-01/ses-$(printf "%02d" $session)/g")
echo $newname
done
done
因为以下代码段太冗长而且我必须在不同情况下反复写代码,我正在寻找一种更加惯用且更简单的方法来替换多个数字模板。我对shell不太熟悉,但可以使用任何bash内置函数或GNU工具。
我可以使用简单的正则表达式吗?
THX。
答案 0 :(得分:0)
使用$template
作为printf
template="sub-%02d_ses-%02d_blabla.txt"
for subject in 1 2 3; do
for session in 1 2; do
newname=$(printed "$template" "$subject" "$session")
echo "$newname"
done
done
答案 1 :(得分:0)
Awk将是一个很好的候选人,使用i和p作为计数器,_作为分隔符
awk -F\_ '{ for ( i=1;i<=3;i++) for ( p=1;p<=2;p++) print "sub-0"i"_ses-0"p"_"$3 }' <<< "sub-01_ses-01_blabla.txt"