我正在尝试使用 awk 命令处理一堆文件(五个)并使用增量命名输出文件。 输入文件的名称很复杂。我知道如何重用文件的基本名称来重命名输出,但我想简化文件名。
这是我的代码:
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
我知道错误出现在第二行,因为我写的是针对第一个循环的每个值运行第二个循环。我希望第一个循环的每个值对应于第二个循环的一个值。
希望这已经够清楚了
最佳答案
怎么样:
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"
替换。
关于bash - 如何在 bash 文件循环后使用增量命名输出文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23549294/