如何在bash中的循环更改名称中创建一系列值

时间:2015-11-10 03:14:40

标签: bash

需要用逗号值替换大约2500个CSV文件,我需要一个脚本来选择范围。

R000001.CSV .... R000499在5个目录中,但是需要使用for for next来更改文件名。

我需要一些建议来使这个脚本有效。

BTW _1是已处理文件的标记。

y <- x

1 个答案:

答案 0 :(得分:1)

尝试:

for a in $(seq -f '%06.0f' "$f" "$l")
do
    echo tr -d '\r' ';' <R*$a.CSV >R*${a}_1.CSV
done

注意:

  1. 表达式{$f..$l..1}不起作用,因为变量不能放在大括号扩展中。

  2. 可以使用实用程序seq代替大括号扩展。使用-f选项,我们可以选择与您的文件名匹配的格式。

  3. 在循环中,您想引用$a而不是$f

  4. 表达式$f_1无法正常运行。 _1都是shell变量名称中的合法字符。因此,shell将尝试查找名为f_1的shell变量并展开它。那不是你想要的。在shell变量名称周围使用大括号(例如${f}_1)可以避免这种情况。

  5. 没有seq

    for ((i=$f; i<=$l; i++)) do j=$(printf '%06i' $i); tr '\r' ';'<"R$j.CSV" >"R${j}_1.CSV"; done
    

    或者,为了清晰起见,写在多行上:

    for ((i=$f; i<=$l; i++))
    do
        j=$(printf '%06i' $i)
        tr '\r' ';'<"R$j.CSV" >"R${j}_1.CSV"
    done