我现在有Free_1, Free_2 .... Free_30这样的很多文件,需要读出他们的第2列与分别与另外的Green_1, Green_2...Green_30做减法。我想写个循环,为何总是awk不能读入有变量的文件名。怎么做啊?
for a in $(seq 1 1 30)
do
b=`awk '{print $2}' Free_$a`
c=`awk '{print $2}' Green_$a`
awk '{print '$b'-'$c'}' > delta_$a
done
awk 处理多个文件
答案:2 悬赏:40 手机版
解决时间 2021-02-27 01:21
- 提问者网友:椧運幽默
- 2021-02-26 21:15
最佳答案
- 五星知识达人网友:过活
- 2021-02-26 21:46
[root@localhost ~]# cat a
for i in `ls Free_*`
do
b=`awk '{print \$2}' $i`
d=`ls $i|awk -F_ '{print \$2}'`
c=`awk '{print \$2}' Green_$d `
expr $b - $c >delta_$d
done
[root@localhost ~]# cat Free_1
df 12 12
[root@localhost ~]# cat Green_1
asd 34 h
[root@localhost ~]# sh -x a
++ ls Free_1
+ for i in '`ls Free_*`'
++ awk '{print $2}' Free_1
+ b=12
++ ls Free_1
++ awk -F_ '{print $2}'
+ d=1
++ awk '{print $2}' Green_1
+ c=34
+ expr 12 - 34
[root@localhost ~]# cat delta_1
-22
你的脚本:
[root@localhost ~]# cat a
for i in `seq 1 1 30`
do
b=`awk '{print \$2}' Free_$i`
c=`awk '{print \$2}' Green_$i `
expr $b - $c >delta_$d
done
主要是执行减法的时候报错,不用awk那样处理,awk后面必须接输入源
for i in `ls Free_*`
do
b=`awk '{print \$2}' $i`
d=`ls $i|awk -F_ '{print \$2}'`
c=`awk '{print \$2}' Green_$d `
expr $b - $c >delta_$d
done
[root@localhost ~]# cat Free_1
df 12 12
[root@localhost ~]# cat Green_1
asd 34 h
[root@localhost ~]# sh -x a
++ ls Free_1
+ for i in '`ls Free_*`'
++ awk '{print $2}' Free_1
+ b=12
++ ls Free_1
++ awk -F_ '{print $2}'
+ d=1
++ awk '{print $2}' Green_1
+ c=34
+ expr 12 - 34
[root@localhost ~]# cat delta_1
-22
你的脚本:
[root@localhost ~]# cat a
for i in `seq 1 1 30`
do
b=`awk '{print \$2}' Free_$i`
c=`awk '{print \$2}' Green_$i `
expr $b - $c >delta_$d
done
主要是执行减法的时候报错,不用awk那样处理,awk后面必须接输入源
全部回答
- 1楼网友:迟山
- 2021-02-26 22:56
seq 1 30?或for((a=1;a<=30;i++))
Free_$a.***?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯