时
ls *.mp3 | sort -rn | while read f
do
number=`echo "$f" | sed 's/ .*//'`
rest=`echo "$f" | sed 's/^[^ ]* //'`
number2=`expr $number + 1`
number2f=`printf %02d $number2`
mv -i "$number $rest" "$number2f $rest"
done
有效?
答案 0 :(得分:2)
我们可以用一个例子来说明。以下是按地区划分的一些州名缩写。
south <- c('FL', 'TN', 'LA', 'GA')
west <- c('CA', 'NV', 'WA', 'AZ')
让我们来看看南部各州的A&#39;或者&#39; L&#39;在他们的缩写。
y1 <- 'A'
y2 <- 'L'
我们可以将它们写入grep
函数并用管道符|
分隔。或者我们可以练习使用变量名称。如果连接变量,我们将无法获得正确的输出。
grep('A|L', south, value=TRUE)
[1] "FL" "LA" "GA"
grep(paste(y1, y2, sep='|'), south, value=TRUE)
[1] "FL" "LA" "GA"
grep(c(y1, y2), south, value=TRUE)
[1] "LA" "GA"
Warning message:
In grep(c(y1, y2), south, value = TRUE) :
argument 'pattern' has length > 1 and only the first element will be used
但还有更多。如果我们想找到拥有'L'
的南部州和拥有'A'
的西部州,该怎么办?我们必须编写两个函数,对吧?
mapply(grep, list(y2, y1), list(south, west), value=TRUE)
[[1]]
[1] "FL" "LA"
[[2]]
[1] "CA" "WA" "AZ"
所有这一切都是一步完成的。
答案 1 :(得分:0)
不,你不能。但是你总是可以使用Vectorize
快速地向量化一个函数(但有时性能不是那么好)。
没有矢量化:
grep(list("x1", "x2"), list("x1","x2")) # does not work
[1] 1
Warning message:
In grep(list("x1", "x2"), list("x1", "x2")) :
argument 'pattern' has length > 1 and only the first element will be used
向量化:
Vectorize(grep)(list("x1", "x2"), list("x1","x2")) # it works
[1] 1 1
或者,如果您愿意,您只能向量化特定参数:
Vectorize(grep, "pattern" )(c("a","b","c"),c("aa","bb","cc","aa2"))
$a
[1] 1 4
$b
[1] 2
$c
[1] 3
如果您打算使用矢量化版本,也许您应该将它们分配给其他功能:
vgrep <- Vectorize(grep)
vgrep(list("x1", "x2"), list("x1","x2"))
[1] 1 1