我试图用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
我理解错误在第二行,因为我写的内容为第一行的每个值运行第二个循环。我希望第一个循环的每个值对应于第二个循环的一个值。
希望这很清楚
答案 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