Chinaunix首页 | 论坛 | 博客
  • 博客访问: 45597
  • 博文数量: 14
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2015-11-16 18:43
文章分类

全部博文(14)

文章存档

2016年(6)

2015年(8)

我的朋友

分类: LINUX

2015-11-20 11:52:33

Awk 的交互 SHELL脚本实现 “-”的使用情景

 “ - ”的使用 # - ”表示awk的输入由标准输入不由文本输入

本文旨在区分清楚:

  “-”的含义及使用情景

  “-”键入内容导致脚本中$N应用时$N代表含义


(一)可写可不写“-”在脚本最后

1)求阶乘脚本  #-”为可选

awk '

BEGIN {

       printf("Enter number: ")

}

$0 ~ /^[0-9]+$/ {             #$0为键入内容,因为awk脚本的处理的输入为键入,改为$1效果相同

       number=$0

       fact=number

       for ( x = number - 1 ; x > 1 ; x-- )

           fact *= x

       printf ("this factorial of %d is %g\n", number, fact )

       exit

}

{

       printf (" \ninvalid entry. entry a number: ")

}' -   #此处“-”可写可不写,因为awk ‘{…}’后没有指定文件,默认标准输入从键入达到交互目的。


 

2)格式转换脚本(阿拉伯数字转换为罗马数字)#-”为可选

awk  '

BEGIN {

split ("I,II,III,IV,V,VI,VII,VIII,IX,X",number,",")

printf ("please enter number: ")

}

$1 > 0 && $1 <= 10 { #$1为键入内容,因为awk脚本的处理的输入为键入,改为$0效果相同;若改为$2,则输入时第二个字段为1-10中数字即可执行

 

#split ("I,II,III,IV,V,VI,VII,VIII,IX,X",number,",")

        print number[$1]

        exit

}

{ print "invaild number" ; exit  }

' -  #此处“-”可写可不写,因为awk ‘{…}’后没有指定文件,默认标准输入从键入达到交互目的

 

###脚本中改为$2

$2 > 0 && $2 <= 10 {

#split ("I,II,III,IV,V,VI,VII,VIII,IX,X",number,",")

        print number[$2]

        exit

}

执行效果:

 注意此时脚本仅读取输入的内容中第二字段$2,即5

 

(二)必须写“-”于脚本最后

1)检索特定文件中的字符脚本  #-”必选

awk -v dir=$1 '    #$1为SHELL脚本的第一个参数

BEGIN { FS = "\t" ; OFS = "\t"

printf ( "Enter a file term: " )

FILENAME == dir {

entry[$1] = $2      #$1,$2为检索文件中的第一个字段和第二个字段

next                    #next将搜索的文件dir所有行全部读取,执行了数组赋值操作,所以下面的$1为键入的内容,例子“GIGO”

}

$1 ~ /^(quit|[qQ]|exit|[Xx])$/ { exit }   #$1为“-”键入的检索内容,可改为$0

$1 != "" {

        if ( $1 in entry )

                print entry[$1]

        else

                print $1 " not found"

        }

{

printf("Enter another file term (q to quit): ")

}' $1 –   #$1为SHELL脚本的第一个参数

 

此脚本中最后的“-”必须输入,因为存在$1,awk会处理$1,而目的为从$1中检索我们输入的字符串“-”

2)执行效果:

检索的文件:


阅读(1037) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~