awk使用shell变量,shell获取awk中的变量值

深度学习代码专栏    攒课--我的学习我做主    开启你的知识管理,知识库个人图谱上线    

awk使用shell变量,shell获取awk中的变量值

1904人阅读 评论(0) 收藏 举报 http://blog.csdn.net/czh52911/article/details/9380997
本文章已收录于:
分类:
linux shell脚本学习(7)
作者同类文章 X

原文:http://renyongjie668.blog.163.com/blog/static/16005312011829102025222/

我认为在linuxawk是个好东东啊,处理一些文本文件会非常方便。而在Linux下嘛,经常会和shell打交道,所以awkshell之间的变量相互传递,有时还是很有必要的,所以简单总结一下吧。

 

awk中使用shell中的变量

: "'$var'"

这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.:

var="test"
awk 'BEGIN{print "'$var'"}'

这种写法其实际是双括号变为单括号的常量,传递给了awk.

如果var中含空格,为了shell不把空格作为分格符,便应该如下使用:

var="this is a test"
awk 'BEGIN{print "'"$var"'"}'
: '"$var"'

这种写法与上一种类似.如果变量含空格,则变为'""$var""'较为可靠.
: export变量,使用ENVIRON["var"]形式,获取环境变量的值

例如:
var="this is a test"; export var;

awk 'BEGIN{print ENVIRON["var"]}'


:可以使用awk-v选项 (如果变量个数不多,个人偏向于这种写法)(测试可用)

例如:
var="this is a test"
awk -v awk_var="$var" 'BEGIN {print awk_var}'

这样便把系统变量var传递给了awk变量awk_var.

 

awk的一般语法格式为:http://www.cnblogs.com/dong008259/archive/2011/12/06/2277287.html
  awk [-参数 变量] 'BEGIN{初始化}条件类型1{动作1}条件类型2{动作2}。。。。END{后处理}'
其中:BEGIN和END中的语句分别在开始读取文件(in_file)之前和读取完文件之后发挥作用,可以理解为初始化和扫尾。
(1)参数说明:
   -F re:允许awk更改其字段分隔符
      -v var=$v 把v值赋值给var,如果有多个变量要赋值,那么就写多个-v,每个变量赋值对应一个-v
    e.g. 要打印文件a的第num行到num+num1行之间的行,
      awk -v num=$num -v num1=$num1 'NR==num,NR==num+num1{print}' a
  -f progfile:允许awk调用并执行progfile程序文件,当然progfile必须是一个符合awk语法的程序文件。

 

 awkshell变量传递值

awkshell传递变量,其思想无非是用awk(sed/perl等也是一样)输出若干条shell命令,然后再用shell去执行这些命令。

eval $(awk 'BEGIN{print "var1='str1';var2='str2'"}')

或者eval $(awk '{printf("var1=%s; var2=%s; var3=%s;",$1,$2,$3)}' abc.txt)

之后可以在当前shell中使用var1,var2等变量了。

echo "var1=$var1 ----- var2=$var2"

 

 参考资料:

http://developer.51cto.com/art/200509/3781.htm

http://www.ixpub.net/thread-1457438-1-1.html

你可能感兴趣的:(linux,shell)