Linux处理文本工具

    grep: 过滤文本内容

    sed:  编辑文本内容

    awk:   显示文本

    

awk:  Aho Peter Weinberger  Kernighan

报告生成器,以特定的条件查找文本内容,在以特定的格式显示

awk命令的格式:

# awk [option] 'script' file1 file2...

# awk [option] 'PATTERM{action}' file1 file2...

PATTERN:

    用文本字符与正则表达式元字符描述的条件,可以省略不写

action:

    print

    printf  指定输出项的格式:格式必须写

option选项:

    -F  指定文本分割符

    
awk处理文本机制:

awk将符合PATTERN的文本逐渐取出,并按照指定的分割符(默认为空白,通过—F选项可以指定分割符)进行分割,然后将分割后的每段按照特定的格式输出

awk的输出:

一 print

print的使用格式:

    print item1,item,...

注意:

1,各项目间使用逗号分隔开,而输出时以空白字符串为分隔

2,输出的item可以为字符串,数值,当前的记录的字段($1),变量或者awk的表达式,数值会先转换字符串,然后输出

3,print命令后面的item可以省略,此时其功能相当于print($0代表未分割的整行文本内容),因此,如果想输出空行,则需要使用print "";

以空白分割,显示文本的第一段及第二段内容

[root@wei awk]# awk '{print $1,$3}' print.txt 
i wei
i zhang
[root@wei awk]# awk '{print "hello",$3}' print.txt 
hello wei
hello zhang

显示passwd的用户名称

[root@wei awk]# awk -F: '{print $1}' /etc/passwd
root
bin
daemon
adm
lp

显示设备的挂载情况

[root@wei awk]# df -hT | sed '1d' | awk '{print "设备名称:",$1,"挂载点:",$7,"总容量:",$3}'
设备名称: /dev/mapper/centos-root 挂载点: / 总容量: 17G
设备名称: devtmpfs 挂载点: /dev 总容量: 476M
设备名称: tmpfs 挂载点: /dev/shm 总容量: 488M

awk变量

1 awk内置变量之记录变量

FS:指定读取文本时,所使用的行分隔符,默认为空白字符,相当于awk的—F选项

OFS:指定输出的分隔符,默认为空白字符;

[root@wei awk]# head -n 1 /etc/passwd | awk -F: '{print $1,$7}'
root /bin/bash

FS模式

[root@wei awk]# head -n 1 /etc/passwd | awk 'BEGIN{FS=":"}{print $1,$7}'
root /bin/bash

OFS模式

[root@wei awk]# head -n 1 /etc/passwd | awk -F: 'BEGIN{OFS="---"}{print $1,$7}'
root---/bin/bash

模式混合

[root@wei awk]# head -n 1 /etc/passwd | awk 'BEGIN{FS=":";OFS="---"}{print $1,$7}'
root---/bin/bash

2  awk内置变量之数据变量

NR:记录awk所处理的文本行数,如果有多个文件,所有的文件统一进行计数

第 1 行内容: 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
第 2 行内容: ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
第 3 行内容: \S
第 4 行内容: Kernel \r on an \m
第 5 行内容: 

注意:

print在显示变量值时,不要使用$

FNR:记录awk所处理的文本行数,如果有多个文件,所有的文件分别进行计数

[root@wei awk]# awk '{print "第",FNR,"行内容:",$0}' /etc/hosts /etc/issue
第 1 行内容: 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
第 2 行内容: ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
第 1 行内容: \S
第 2 行内容: Kernel \r on an \m
第 3 行内容:

NF:记录awk正在处理的当前行被分隔成几个字段

[root@wei awk]# cat print.txt 
i am wei
i am zhang
[root@wei awk]# awk '{print NF}' print.txt 
3
3
[root@wei awk]# awk '{print $NF}' print.txt 
wei
zhang

3 用户自定义的变量

awk允许用户自定义变量,变量名称不能以数字开头,且区分大小写

示例: 

方法一:使用-v选项

[root@wei awk]# head -n 3 /etc/passwd | awk -v test="hello" -F: '{print test,$1}'
hello root
hello bin
hello daemon

方法二:在BEGIN{}模式自定义变量

[root@wei awk]# head -n 3 /etc/passwd | awk -F: 'BEGIN{test="hello"}{print test,$1}'
hello root
hello bin
hello daemon

Linux shell awk中print及变量使用的更多相关文章

  1. Linux shell awk中printf使用

    printf 是 awk 的重要格式化输出命令 printf格式化输出内容 格式:     printf format,item1,item2...     要点: 1,printf输出时要指定格式f ...

  2. Linux Shell编程中的几个特殊符号命令 & 、&& 、 ||

    https://blog.csdn.net/hack8/article/details/39672145 Linux Shell编程中的几个特殊符号命令 & .&& . || ...

  3. 学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

  4. Linux shell脚本中shift

    Linux shell脚本中shift的用法说明 shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本). ...

  5. Linux shell命令中expr

    在Linux shell命令中expr虽然不是很起眼,但是它的作用是非常大的!到目前为止,我个人看来最大的作用就是两个——四则运算和字符串的操作. 先说四则运算,在Shell中四则运算不能简简单单的加 ...

  6. Linux shell脚本中shift的用法说明【转】

    本文转载自:http://blog.csdn.net/zhu_xun/article/details/24796235 Linux shell脚本中shift的用法说明 shift命令用于对参数的移动 ...

  7. shell脚本中特定符合变量的含义

    shell脚本中特定符合变量的含义: $#   传递到脚本的参数个数 $*    以一个单字符串显示所有向脚本传递的参数.与位置变量不同,此选项参数可超过9个 $$    脚本运行的当前进程PID号 ...

  8. linux shell脚本中的延时

    linux shell脚本中的延时 还是使用 sleep 或usleep函数. 详细如下:     .sleep : 默认为秒. sleep 1s 表示延迟一秒   sleep 1m 表示延迟一分钟 ...

  9. Linux shell 脚本中变量的数学计算【转】

    本文转载自:http://blog.csdn.net/qinghezhen/article/details/9194287 首先从一个例子说起: x=1+1 echo $x 你是不是期待着输出2啊?让 ...

随机推荐

  1. Spring Cloud微服务安全实战_3-8_API安全之登录

    前面的文章 https://www.cnblogs.com/lihaoyang/p/11967121.html  说了用过滤器实现HttpBasic 认证 ,在请求头里携带用户名和密码,存在的问题是, ...

  2. 学习-velocity

    Velocity是什么?  Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码 ...

  3. 编码-转义2-mark

    文本编辑器utf8 "一".encode("gbk") 保存:"一"+utf8     保存为16进制的\xe4\xb8\x80,\x标识了 ...

  4. ABP 不包裹返回的数据

    告诉abp不包裹返回的数据,返回的数据是什么 就是什么 不用再多包裹一次了. 用在 如:别人需要你提供接口 且给你指定了返回的数据结构. 源码:

  5. python中使用rsa加密

    前提不多说, 为什么使用RSA加密请自行搜索,直接正为: 一. 生成公钥及私钥, 并保存 二. 使用公钥加密, 私钥解密 后记: 通常使用中, 会先对数据进行bas64加密, 再对加密后的内容使用rs ...

  6. 配置Hive 支持 JSON 存储

    1.说明 hive默认使用分隔符如空格,分号,"|",制表符\t来格式化数据记录,对于复杂数据类型如json,nginx日志等,就没有办法拆分了,这时候需要更加强大的SerDe来处 ...

  7. [LeetCode] 88. Merge Sorted Array 混合插入有序数组

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: T ...

  8. 第01组 Beta冲刺(4/5)

    队名:007 组长博客: https://www.cnblogs.com/Linrrui/p/12019233.html 作业博客: https://edu.cnblogs.com/campus/fz ...

  9. GreenPlum 大数据平台--segment 失效问题恢复

    1,问题检查 [gpadmin@greenplum01 conf]$ psql -c "select * from gp_segment_configuration where status ...

  10. .NET Core创建Worker Services

    .NET CORE 3.0新增了Worker Services的新项目模板,可以编写长时间运行的后台服务,并且能轻松的部署成windows服务或linux守护程序.如果安装的vs2019是中文版本,W ...