shell学习笔记(三)

1.awk

对付文字处理工作,做一些文本/数据处理,最基本功能是在文件或字符串中基于指定规则浏览和抽取信息.

1. 调用awk

第一种是命令行方式,如:

  • awk [-F fs] 'command' file这里,command是真正的awk命令。上面例子中, [-F 域分隔符]是可选的,默认使用空格作为缺省的域分隔符,这样就不用指定这个选项.
    fs是指定的分隔符,可以使用字符串或者正则表达式。例如:-F:.

  • 第二种方法是将所有awk命令插入一个文件,并使awk程序可执行,然后用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用它.

  • 第三种方式是将所有的awk命令插入一个单独文件,然后调用:
    awk -f script_file file
    -f选项指明在文件 script _ file中的a w k脚本,file是使用awk进行浏览的文件名.
    理解:
    第一种是把命令写在处理文件外面,用单引号标注;.
    第二种是把命令写在处理文件里面;
    第三种是把命令单独写成脚本,然后处理文件;

2.awk脚本

   在命令中调用awk时, awk脚本由各种操作和模式组成.
   如果设置了-F选项,则awk每次读一条记录或一行,并使用指定的分隔符分隔指定域.
   但如果未设置-F选项,awk假定空格为域分隔符,并保持这个设置直到发现一新行
   awk读取命令行上所指定的各个文件,一次读取一条记录,找到域分隔符,设置其为域n.
   再针对每一行,应用程序指定的命令.
  • 模式和动作
    任何awk语句都由模式和动作组成.
  • 模式可以是任何条件语句或复合语句或正则表达式.
    模式有两个特殊字段,BEGIN ,END.
    BEGIN语句块在awk从输入中读取行之前执行.
    这两个都是可选的语句块,变量初始化,打印输出等语句都可以写在里面;
  • END在awk从输入流读完所有的行之后进行操作.
    实际动作在大括号 { }内指明,如果不指明采取动作,awk将打印出所有浏览出来的记录.
    动作由一个或多个命令、函数、表达式组成,之间由换行符或分号分开,主要部分是变量赋值,输出命令,内置函数,控制流语句.
    模式部分决定动作语句何时触发及触发事件,处理即对数据进行的操作.如果省略模式部分,动作将时刻保持执行状态.
  • awk ’BEGIN { print "start" } pattern { command } END {print"end"}' file.
    begin end 语句块,通用模式匹配语句块,这些都是可选的.
    通用语句块是动作,没有模式部分,动作时刻执行.

  • 域和记录
    awk执行时,其浏览域标记为$1, $2 . . . $n。这种方法称为域标识。使用这些域标识将更容
    易对域进行进一步处理.$0,意即所有域.
shell学习笔记(三)_第1张图片
图片3.png
shell学习笔记(三)_第2张图片
图片4.png
  • 在碰到 awk错误时,可相应查找:
    • 确保整个awk命令用单引号括起来.
    • 确保命令内所有引号成对出现.
    • 确保用花括号括起动作语句,用圆括号括起条件语句.
    • 可能忘记使用花括号,也许你认为没有必要,但 awk不这样认为,将按之解释语法.

3.awk中正则表达式及其操作

awk里正则表达式用斜线括起来,例如/liu/,有点跟perl相似.
shell学习笔记(三)_第3张图片
图片2.png
元字符的话,awk都可以识别使用.
awk中if后面的条件用()括起来,注意与{}区别,这个是条件表达式.  
应用 awk [-F fs]‘command’ file ,多注意括号,引号,其余正常使用正则表达式就行.
awk对域还有好几种操作,参考linux与unix shell,对于域值比较,修改域操作,增加列值,文件长度相加,还挺有帮助的.
awk还有好多字符串函数,更有效的处理文本;需要对文本处理时,可以参考.
awk里正则表达式用法格式:
图片1.png

2.输入输出(echo,read,cat,tee,printf)

  • 使用echo命令可以显示文本行或变量,或者把字符串输入到文件。它的一般形式为:
    echo string
    echo 将各个参数打印到标准输出,并以换行符结束.
    -n 不用换行符结束。
    -e 允许后面的输出进行转义.

  • read从标准输入中读取一行,并把输入行的每个字段的值传递给指定的shell变量.
    可以使用read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量.如果只指定了一个变量,那么 read将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车.
    它的一般形式为:
    read varible1 varible2 ...
    eg:read name surname
    peng liu
    echo $name $ surname
    peng liu
    如果,变量少于字段个数,那么第一个字段被赋给第一个变量,其余的部分都赋给第二个变量.

  • cat
    显示文件内容,创建文件.
  • tee
    tee命令功能可以用字母T表示,功能是把输出的一个副本输送到标准输出,另一个副本拷贝到指定的文件里.
    sort file | tee out.txt

  • printf
    格式化输出,加强版的echo,有各种各样的格式输出.类似与c语言里的printf().
    printf函数基本语法是printf( [格式控制符],参数),格式控制字符通常在引号里.

格式控制符:

shell学习笔记(三)_第4张图片
图片1.png

你可能感兴趣的:(shell学习笔记(三))