在bash文件循环后如何使用增量命名输出文件?

时间:2014-05-08 18:02:52

标签: bash loops for-loop awk

我试图用awk命令处理一堆文件(五个)并使用增量命名输出文件。 输入文件名称复杂。我知道如何重用文件' basenames重命名输出,但我想简化文件名。

这是我的代码:

for f in *.txt; do
    for i in {1..5}; do
        echo processing file $f
        awk '
            { if ($1=="something" && ($5=="60" || $5=="61"|| $5=="62"|| $5=="63"|| $5=="64"|| $5=="65"|| $5=="66"|| $5=="67"|| $5=="68"|| $5=="69"|| $5=="70"))
            print   }' $b.txt>"file_treated"$i.txt
        echo processing file $f over
    done
done

我理解错误在第二行,因为我写的内容为第一行的每个值运行第二个循环。我希望第一个循环的每个值对应于第二个循环的一个值。

希望这很清楚

2 个答案:

答案 0 :(得分:4)

怎么样:

i=0
for f in *.txt; do
    let i++;
    awk '$1=="something" && ($5 >= 60 && $5 <=70)' "$f" > file_treated"${i}".txt
done

我简化了您的awk命令并理顺了您的各种引用问题。我还删除了$b.txt,因为您只是在重新创建$f。我离开了echo $b等以防您真正想要,但它可以很容易地被echo "$f"替换。

答案 1 :(得分:2)

使用计数器:

i=1
for f in *.txt
do
    echo "$f is number $((i++))"
done