shell知识点(一)

来源:互联网 发布:摩卡软件 java笔试题 编辑:程序博客网 时间:2024/05/17 02:08

1、awk中,花括号用于将几块代码组合在一起。
  
   #显示一个文档的内容到控制台上
   $ awk '{print}' /etc/passwd

2、在awk中$0变高了表示整个当前行,所以print和print $0的作用完全一样。

3、以冒号分割每行,然后显示每行第一个字段
   $ awk -F":" '{print $1}' /etc/passwd

    <1>、-F选项指定了字段分割符
    <2>、$1表示每一行分割后的第一个字段

4、对打印的信息添加一些文本信息
 
   $ awk -F":" '{print "username:"$1 "\t\tuid" $3}' /etc/passwd
   <1>、在print后面添加文本可以是有双引号直接添加

 

5、通常,对于每个输入行,awk都会执行每个脚本代码块一次;
   awk在开始处理输入文件前会执行BEGIN代码块;  
   awk在粗粒输入文件中的所有行之后执行END代码块;


6、规则表达式:awk允许使用规则表达式,根据规则表达式是否匹配当前行来选择执行独立代码块。
 
   #只输出包好字符序列foo的那些行,使用/把字符串包含起来
    /foo/{print}
  
   #一些复杂的规则表达式
   /[0-9]+\.[0-9]*/{print}


7、if [[ -z "字符串"]]; then
      code;
   fi
   
   <1>、[[]]  相当于(),但是[[和]]要和它们前后的变量要用空格隔开;
   <2>、-z是判断字符串是否为空。

 
8、在命令中要用到其他命令的结果,可以把其他命令放到``中。
  如:
  
   #杀掉包含recomm和cn.richinfo这2个字符串的进程
   kill ` ps aux|grep recomm|grep cn.richinfo|awk '{print $2}'`


9、可以讲任意一种布尔表达式放在一个代码块之前 ,以控制合适执行某特定块。
   仅当对前面的布尔表达式求值为真时,awk才执行代码块。
  
   awk -F":" '$1 == "fred" {print $3}' /etc/passwd
 
   awk提供了完整的比较运算符集合:"==" 、"<"、">"、"<="、">=" 、"!="、"~"、"!~",
   其中"~"和"!~"是匹配(即包含)和不匹配(不包含)。

   #第五个字段包含root,则打印第三个字段,注:root要用//包含起来
   awk -F":"  ' $5~/root/{print $3}'  /etc/passwd


   #打印包含root的行
    awk '$0 ~ /root/{print $0}'  /etc/passwd
    或者
    awk '/root/{print $0}' /etc/passwd

    #打印不包含root的行
    awk '$0 !~ /root/{print $0}' /etc/passwd
    或者
    awk '!/root/{print $0}'  /etc/passwd

10、awk还允许使用布尔运算符"||"(逻辑或)和"&&"(逻辑与)

   awk '($1 == "foo") && ($2 == "bar"){print $0}'  /etc/passwd   

 

11、FS是设置字段分割符,RS是记录分割符,默认情况RS="\n"即每行是一个记录;
    FS=" "即字段是以空格分割;

   
    #以空格分割为记录,以每行为一个字段
    BEGIN {
      FS="\n"
      RS=""
    }
    { print $1 "," $2 ","$3 }
   
12、awk常用的内建变量

     FILENAME  当前输入文件的文件名,改变量是只读的;

     NR        当前行的行号,该变量是只读的,R代表record;
     NF        当前行有多少列,改变量只读;

     OFS       输出格式的列分割符,缺省是空格;
     FS        输入文件的列分隔符,缺省是连续的空格和Tab;
     ORS       输出格式的行分隔符,缺省是换行符;
     RS        输入文件的行分割符,缺省是换行符;

     $0        整行记录
     $1        第一列,$2,$3类推
    
    


13、在awk中变量无须定义即可使用,变量在赋值时即已经完成定义。


  

 

 

 

原创粉丝点击