如:
A=44echo "ABCD" | awk -v GET_A=$A ’{print GET_A}’
说明:-v选项用于定义参数,这里表示将变量A的值赋予GET_A。
有多少个变量需要赋值,就需要多少个-v选项。与之等价的:应用于脚本中:
#! /bin/bash
sort -n filename |awk -F ':' '{print $1}'|uniq >id.txt
for id in `cat id.txt`; do
echo "[$id]"
awk -v id2=$id -F ':' '$1==id2 {print $2}' filename // 另外的方式为: awk -F ':' '$1=="'id'" {print $2}' filename
done
附件:
cat filename
1111111:13443253456
2222222:13211222122
1111111:13643543544
3333333:12341243123
2222222:12123123123
运行脚本后结果为:
[1111111]
13443253456
13643543544
[2222222]
13211222122
12123123123
[3333333]
12341243123
A=44echo "ABCD" | awk -v GET_A=$A ’{print GET_A}’
说明:-v选项用于定义参数,这里表示将变量A的值赋予GET_A。
有多少个变量需要赋值,就需要多少个-v选项。与之等价的:应用于脚本中:
#! /bin/bash
sort -n filename |awk -F ':' '{print $1}'|uniq >id.txt
for id in `cat id.txt`; do
echo "[$id]"
awk -v id2=$id -F ':' '$1==id2 {print $2}' filename // 另外的方式为: awk -F ':' '$1=="'id'" {print $2}' filename
done
附件:
cat filename
1111111:13443253456
2222222:13211222122
1111111:13643543544
3333333:12341243123
2222222:12123123123
运行脚本后结果为:
[1111111]
13443253456
13643543544
[2222222]
13211222122
12123123123
[3333333]
12341243123
0
for r in {0..23}
do
i=`echo any | awk -v r=$r 'END{printf("%02d",r)}'`
echo "cat access.$i.00.log > access.$i.30.log"
done
do
i=`echo any | awk -v r=$r 'END{printf("%02d",r)}'`
echo "cat access.$i.00.log > access.$i.30.log"
done
0
[root@Kry134 ~]# cat test.txt 1111111:13443253456 2222222:13211222122 1111111:13643543544 3333333:12341243123 2222222:12123123123 [root@Kry134 ~]# cat srcipt #!/bin/bash sort -n test.txt |awk -F ':' '{print $1}'|uniq >id.txt for id in `cat id.txt`; do echo "[$id]" awk -v id2=$id -F ':' '$1==id2 {print $2}' test.txt # awk -F ':' '$1=="'id2'" {print $2}' test.txt 另一种实现方式 done [root@Kry134 ~]# ./srcipt [1111111] 13443253456 13643543544 [2222222] 13211222122 12123123123 [3333333] 12341243123
0
#! /bin/bash
sort -n filename |awk -F ':' '{print $1}'|uniq >id.txt
for id in `cat id.txt`; do
echo "[$id]"
awk -F ':' '$1=="'$id'" {print $2}' filename
done
sort -n filename |awk -F ':' '{print $1}'|uniq >id.txt
for id in `cat id.txt`; do
echo "[$id]"
awk -F ':' '$1=="'$id'" {print $2}' filename
done
0
-v选项不要想的太复杂,就是一个间接引用的意思,意思就是A的值为44,但是你只想用44这个值,却不想用A这个变量,就像老板需要小三,但不想她怀孕一样。于是重新把A赋值给另一个变量,a,然后在awk中只引用a,就可以使用这个44的值。至于为什么绕这个弯,因为A是外部变量啊!!!
例如:
[root@centos7_01 sbin]# cat indirect.sh
#!/bin/bash
A=44
awk -v a=$A -F ':' '{print a ":" $1 }' 1.txt
现在想间接引用A的值44,但是又不想用A这个变量,给A重新起一个名字a,在awk里面引用a。
1.txt内容:
[root@centos7_01 sbin]# cat 1.txt
1111111:13443253456
2222222:13211222122
1111111:1234444444444
3333333:134314353545
2222222:11234444444444
最后执行结果是:
[root@centos7_01 sbin]# sh indirect.sh
44:1111111
44:2222222
44:1111111
44:3333333
44:2222222
编辑回复