awk 中使用外部shell变量

回复 收藏
如:
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

2010-03-02 16:51 举报
已邀请:
0

caixiaochun

赞同来自:

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
0

xieqilang

赞同来自:

0

HwangChen

赞同来自:

最后一条awk语句可以直接 awk -F '$1==$id {print $2}' filename吗?
0

kingleoric

赞同来自:

学习了
0

乐橙306

赞同来自:

1
0

Kry1702

赞同来自:

[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

阿凯

赞同来自:

学习了
0

youna790049213

赞同来自:

#! /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
0

卯亮

赞同来自:

学到了..

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

0

派派菠菜

赞同来自:

终于搞懂了,顺便把shell脚本格式也学了,get,hello world!

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: