当前位置: 代码迷 >> 综合 >> Linux 之Awk 初见
  详细解决方案

Linux 之Awk 初见

热度:0   发布时间:2024-01-19 12:03:44.0

Linux 之Awk 初见awk 又叫 gawk, pattern scanning and processing language 代码中的{}用于将代码分块,print 语句单独出现时的作用是打印相关的内容,awk借用shell 的方法,用$1,$2,$3...这样的方式来顺序地表示行(记录)中的不同字段,注意:$0表示当前行,pirnt$0和print功效相同,如下:

1.过滤出当前系统中的用户名,和用户 使用的shellawk -F : '{print $1" "$7}' /etc/passwd


添加输出的相关描述信息: awk -F : '{print "username :" $1" \t shell is:"$7}' /etc/passwd通常,awk 会针对每个输入行执行一次每个代码块。但是,在许多编程情形下,可能需要在 awk 开始处理输入文件的文本之前执行初始化代码。对这种情况,awk 支持定义 BEGIN 代码块。前一示例使用了这种代码块。因为 BEGIN 代码块在 awk 开始处理输入文件之前执行,因此它是初始化 FS(字段分隔符)变量、打印页眉或者初始化在后续程序中将要引用的其他全局变量的绝佳位置。
另外,awk 还提供了另一种称为 END 的专用代码块。在输入文件的所有行处理完毕之后,awk 执行这个代码块。通常,END 代码块用于进行最终计算或者打印应该在输出流结尾处出现的汇总信息。

正则表达式与代码块
/foo/ { print }
/[0-9]+\.[0-9]*/ { print }2.匹配找出/etc/passwd文件中含有root的行
awk '/root/{print}' /etc/passwd

3.获取某个文件的创建时间


脚本如下:
名称为:workdate.sh
#!/bin/bash
ls -al /root/test | awk '{ name[NR]=$6" "$7}END{for(i=2;i<NR;i++){CREATETIME=name[i]print CREATETIME}}'