bash shell 小点1

1.算术计算

    (()) 内建命令 , 允许只有等号的右边,或者 直接((j=$j+2))  利用$(())取得计算结果

    let  内建命令,表达式用" " 或者 表达式中间没有空格,不能只出现等号右边 ,不用$

    expr 非内建命令,表达式必须有空格,利用$(expr $j + 2)取得计算结果 或者 直接 expr j = $j + 2,允许只有等号的右边

    bc 浮点数计算工具

 

2. if 控制语句

    不允许有类似c语言的  ;空语句

 

3. 打印输出

   shell 没有print , 有printf ,相比c的printf,少了()和 逗号 ,

   awk 可以使用printf ,相比c的printf,少了(),相比shell的printf 多了逗号

           可以使用print ,完全是一个一个输出的堆积 awk ' {printf "nr=",NR,"fnr=",FNR ; print $0 } '

    shell还有echo 可以打印输出,相比printf完全不用在意data的类型。

 

 

4.awk

   close 仅针对I/O重定向运算符所打开的文件或管道,还有getline print  printf。

   输出重定向  awk ‘ print $0 > "filename" ’ file_input   重定向的目标文件名必须用双引号引用起来

                       awk ' print $0 >> "filename" ' file_input

  管道

         awk中使用管道有两种语法,分别是:
         awk output | shell input
         shell output | awk input 

       如果在awk程序中打开了管道,必须先关闭该管道才能打开另一个管道。也就是说一次只能打开一个管道。shell命令必的管道必须被双引号引用起来。

      “如果打算再次在awk程序中使用某个文件或管道进行读写,则可能要先关闭程序,因为其中的管道会保持打开状态直至脚本运行结束。

       注意,管道一旦被打开,就会保持打开状态直至awk退出。因此END块中的语句也会收到管道的影响。(可以在END的第一行关闭管道)”

 

      对于awk output | shell input来说, awk的output是先缓存在pipe中,等输出完毕后再调用shell命令 处理,shell命令只处理一次,而且处理的时机是“awk程序结束时,或者管

                                                              道关闭时(需要显式的关闭管道)”

      $awk  '/west/{count++}  {printf "%s %s\t\t%-15s\n", $3,$4,$1 | "sort +1"}  END{close "sort +1"; printf "The number of sales

                            pers in the western"; printf "region is " count "." }'datafile 

 

    对于 shell output | awk input来说,awk的input只能是getline函数。shell执行的结果缓存于pipe中,再传送给awk处理,如果有多行数据,awk的getline命令可能调用多次。
                     $awk 'BEGIN{ while(("ls" | getline d) > 0) print d}' file

 

4.1 awk

  awk如果没有输入文件,会挂起:

 ip3=$(awk '{print var}' var="$ip_b_addr" file_name)  如果没有file_name , awk会挂起整个程序

4.2 awk 的变量

  awk中,只有$1 $2 .. 需要加 $ 号

  awk定义的 变量 不需要加$号,print 、计算都不需要加 ;

  awk引用主进程的变量需要加 $, 直接print 还需要" ' ' "

 4.3 awk的正则表达式

  awk采用扩展的正则表达式

 

 

5. 变量替换

  ${var#pattern} ${var##pattern} 

  ${var%pattern} ${var%%pattern}

  ${var/#pattern/REPLACEMENT} ${var/%pattern/REPLACEMENT} (1) 开头、结尾匹配才起作用

 (2)pattern 可以是正则表达式,不需要用/ /括起来,直接写就可以

 (3)但是REPLACEMENT 必须是具体的,不能是正则表达式。

 (4) 所以,变量替换 对某一行删除某个字符可能不好用

 

6.  $# $NF

   位置变量的个数  $#

  awk 列的个数  $NF

 

7. sed awk 输出重定向

  7.1 输出  重定向

   sed ‘/.../.../w file_outpu’ file_input   # 覆盖原来file_output的内容

   sed '../../ ' file_input >file_output

   sed ' /../ ../ ' file_input >> file_output #  注意 sed -n ‘ / ../ ../ ’ file > file_output  # file_ouput 不会有内容,因为sed 是-n silent

   awk '{print $0 > file_output}' file_input

   awk '{print $0 >> file_output}' file_input

   7.2 默认输出

  sed 默认输出到tty

  awk默认不输出

  7.3不输出

  sed -n '/..../' file

 7.4  只输出某些行

  sed -n ‘/..../..../p’ file

  awk ‘//{print $0}’ file

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值