向awk传递外部参数的五种方法(直接传递;-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 7081012
  • 博文数量: 1732
  • 博客积分: 18684
  • 博客等级: 上将
  • 技术积分: 16017
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-02 10:28
个人简介

啥也没写

文章分类

(1732)

  • (15)
  • (104)
  • (1378)
  • (46)
  • (22)
  • (146)
  • (21)
文章存档

(21)

(39)

(46)

(43)

(27)

(44)

(50)

(47)

(15)

(21)

(43)

(143)

(228)

(263)

(384)

(246)

(30)

(38)

(2)

(1)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: linux

2021-03-23 10:56:05

原文地址: 作者:

向awk传递外部参数的方法有四:

(一)直接传递
参数写在输入文本之前,脚本之后
awk 'script' var=value inputfile    #单个参数
awk -f scriptfile var1=value1 var2=value2 inputfile   #多个参数

缺点:命令行参数的限制是他们在begin过程中是不可用的,直到首行输入完成以后它们才可用。begin是在首行输入前执行。
$  echo | awk 'begin{print n}' n=1  
                                   # 此命令打印出空,并没有打印1

(二)-v选项
-v 选项,指定在任何输入被读入前定义参数 #指定执行begin前的变量赋值
例子:
awk -v var=value  inputfile
$  echo | awk -v n=1 'begin{print n}'
1                                 

(三)系统内置变量argv数组
argv[n],argv[0]为awk,下标从1开始是输入的参数
例子:
$ echo | awk 'begin{print argv[0]}' var1  
awk
$    echo | awk 'begin{print argv[1]}' var1  var2
var1
$    echo | awk 'begin{print argv[2]}' var1  var2
var2

(四)间接引用 \$${var}
间接变量引用避免了在一个内嵌awk脚本中引用shell变量的混乱行为

例子:
#!/bin/bash
 # 这是" 求文件中指定列的总和" 脚本的另一个版本,
 # 这个脚本可以计算目标文件中指定列( 此列的内容必须都是数字) 的所有数字的和.
 # 这个脚本使用了间接引用.
 args=2
 e_wrongargs=65
  if [ $# -ne "$args" ] # 检查命令行参数的个数是否合适.
  then
   echo "usage: `basename $0` filename column-number"
   exit $e_wrongargs
  fi

  filename=$1
  column_number=$2  ######使用时指定计算列数######

  # awk脚本开始.
  # ------------------------------------------------
  awk "  #注意此处为双引号
 
  { total = \$${column_number} # 间接引用,先将列数的变量替换得到$n,$n对应awk的列数
  }
  end {
   print total
   }
   " "$filename"
  # ------------------------------------------------
  # awk脚本结束.
  exit 0

另一解决办法:

  awk -v n=$column_number " #传递了column_number给n变量到awk中
 
  { total = \$n    # n 先替换为变量$column-number指定数字,再执行$number执行列数
  }
  end {
   print total
   }
   " "$filename"
  # ------------------------------------------------
  # awk脚本结束.

(五)export结合environ变量

#!/bin/bash
 
 # 这是" 求列的和" 脚本的另外一个版本(col-totaler.sh)
 # 这个版本将把一个变量通过export的形式传递到'awk' 中 . . .
 # 并且把awk脚本放到一个变量中.
 
 
 args=2
  e_wrongargs=65
 
  if [ $# -ne "$args" ] # 检查命令行参数的个数.
  then
   echo "usage: `basename $0` filename column-number"
   exit $e_wrongargs
  fi
 
  filename=$1
  column_number=$2
 
  #===== 上边的这部分, 与原始脚本完全一样 =====#


  export column_number
  # 将列号export出来, 这样后边的进程就可用了.




  # -----------------------------------------------
  awkscript='{ total = $environ["column_number"] }
  end { print total }'
  # 是的, 变量可以保存awk脚本.
  # -----------------------------------------------


  # 现在, 运行这个awk脚本.
  awk "$awkscript" "$filename"


  exit 0


阅读(2206) | 评论(0) | 转发(0) |
0

上一篇:

下一篇:

给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图