awk处理命令行参数

时间:2021-07-06 14:32:23

ARGV awk可以从内置数组ARGV中得到命令行参数,其中包括命令awk。但所有传递给awk的选项都不在其中。ARGV数组的下标从0开始。
ARGC ARGC是一个包含命令行参数个数的内置变量。

范例

cat argvs
# Scriptname:argvs
BEGIN {
   for (i = 0; i <ARGC; i ++ ) {
    printf ( "argv[%d] is %s\n" ,i ,ARGV [i ] )
   }
  printf ( "The number of arguments, ARGC=%d\n" ,ARGC )
}

$ awk  -f argvs datafile
argv [ 0 ] is awk
argv [ 1 ] is datafile
The number of arguments , ARGC = 2

说明
for循环先将i设为0,然后测试它是否小于命令行参数的个数(ARGC) ,再用printf函数依次显示出每个参数。所有参数处理完之后,最后那条printf 语句用来输出参数的个数ARGC。这个例子说明awk并不把命令行选项视为参数。

范例

$ awk  -f argvs datafile  "Peter Pan"  12
argv [ 0 ] is awk
argv [ 1 ] is datafile
argv [ 2 ] is Peter Plan
argv [ 3 ] is  12
The number of arguments ,ARGV = 4

说明:和上个例子一样,打印出所有参数。nawk命令被当成第一个参数,而-f选项和脚本文件名(即argvs)则被排除在外。

范例

cat datafile5
Tom Jones: 123:03 / 14 / 56
Peter Pan: 456:06 / 22 / 58
Joe Blow: 145: 12 / 12 / 78
Santa Ana: 234:02 /03 / 66
Ariel Jones: 987: 11 / 12 / 66

cat arging. sc
# Scriptname:arging.sc
BEGIN {FS = ":";name =ARGV [ 2 ]
  print  "ARGV[2] is "ARGV [ 2 ]
}
$1 ~ name  {print  $0 }

$ awk  -f arging. sc datafile5  "Peter Pan"
ARGV [ 2 ] is Peter Pan
Peter Pan: 456:06 / 22 / 58
nawk: can 't open Peter Pan
input record number 5, file Peter Pan
source 1ine number 2

说明:
1.在BEGIN块中,ARGV[2]的值,即Peter Pan,被赋给变量name。
2.Peter Pan被打印出来了,但是,处理完datafile并将其关闭后,awk试图把Peter Pan作为输入文件打开。awk把参数都作为输入文件。

范例

cat arging2. sc
BEGIN {FS = ";";name =ARGV [ 2 ]
  print  "ARGV[2] is "ARGV [ 2 ]
  delete ARGV [ 2 ]
}
$1 ~ name  {print  $0 }

$ awk  -f arging2. sc datafile  "Peter Pan"
ARGV [ 2 ] is Peter Pan
Peter Pan: 456:06 / 22 / 58

说明:awk把ARGV数组的元素作为输入文件。且awk用完一个参数就将它左移,接着处理下一个,直到ARGV数组变空。如果某个参数使用后立刻被删除,那么这个参数就不会被当作下一个输入文件来处理。

参考资料:http://www.linuxawk.com/jiaocheng/295.html