CentOS 7 Minimal学习笔记:文本分析

一、cut:显示切割的行数据

  • f:选择显示的列
  • s:不显示没有分隔符的行
  • d:自定义分隔符

例如:

原始数据
在这里插入图片描述
用“:”切割,显示第一列
在这里插入图片描述

二、sort:排序文件的行

  • n:按数值排序
  • r:倒序
  • t:自定义分隔符
  • k:选择排序列
  • u:合并相同行
  • f:忽略大小写

例如:

原始数据
在这里插入图片描述
默认按字典依次排序
在这里插入图片描述
用空格分隔,按第二列数值排序
在这里插入图片描述

三、wc:统计单词

  • c:统计字节数
  • m:统计单词数
  • l:统计行数

例如:

原始数据
在这里插入图片描述
第一列为行数,第二列为单词数,第三列为字节数,最后一列为文件名
在这里插入图片描述
显示字节数,不显示文件名
在这里插入图片描述

四、sed:行编辑器

1. 基本语法

sed [options] ‘AddressCommand’ file…

  • n:静默模式,不再默认显示模式空间中的内容
  • i:直接修改原文件
  • e:SCRIPT :可以同时执行多个脚本
  • f:/PATH/TO/SED_SCRIPT
  • r:表示使用扩展正则表达式

2. Command

  • d:删除符合条件的行
  • p:显示符合条件的行
  • a \string:在指定的行后面追加新行,内容为string
  • \n:可以用于换行
  • i \string:在指定的行前面添加新行,内容为string
  • r FILE:将指定的文件的内容添加至符合条件的行处
  • w FILE:将地址指定的范围内的行另存至指定的文件中
  • s/pattern/string/修饰符:查找并替换,默认只替换每一行中第一次被模式匹配到的字符串
    g:行内全局替换
    i:忽略字符大小写
    s///:s###,s@@@
    \(\),\1,\2

3. Address

  • 可以没有
  • 给定范围
  • 查找指定行/str/

例如:

复制第二行,不修改原文件
在这里插入图片描述
把第三行删除,修改原文件
在这里插入图片描述
在第二行行后面追加新行,修改原文件
在这里插入图片描述
查找orange并替换为pear
在这里插入图片描述
查找orange并删除
在这里插入图片描述

五、awk:文本分析工具

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,(空格,制表符)为默认的分隔符,将每行切片,切开的部分再进行各种文本分析处理。

语法:awk -F ‘{pattern + action}’ {filenames}

  • 支持自定义分隔符
  • 支持正则表达式匹配
  • 支持自定义变量,数组:a[1] a[tom] map(key)
  • 支持内置变量
    ARGC:命令行参数个数
    ARGV:命令行参数排列
    ENVIRON:支持队列中的系统变量的使用
    FILENAME:awk浏览的文件名
    FNR:浏览文件的记录数
    FS:设置输入域分隔符,等价于命令行 -F选项
    NS:浏览记录的域的个数
    NR:已读的记录数
    OFS:输出域分隔符
    ORS:输出记录分隔符
    RS:控制记录分隔符
  • 支持函数
    print、split、substr、sub、gsub
  • 支持流程控制语句,类C语言
    if、while、do/while、for、break、continue

例如:

只显示passwd的账户
在这里插入图片描述
只显示passwd的账户和账户对应的shell,而账户与shell之间以制表符分隔,而且在所有行开始前添加列名name,shell,在最后一行添加‘’blue,/bin/nosh”

awk -F’:’ ‘BEGIN{print “name\tshell”}{print $1 “\t” $7}END{print “blue\t/bin/nosh”}’ passwd
在这里插入图片描述
搜索passwd有root关键字的所有行
在这里插入图片描述
统计passwd文件中,每行的行号,每行的列数,对应的完整行的内容
在这里插入图片描述
统计报表:合计每人1月工资,0:manger,1:worker
在这里插入图片描述
awk ‘{split($3,date,"-");if(date[2]==“01”){name[$1]+=$5};if($2==“0”){role[$1]=“manager”}else{role[$1]=“worker”}}END{for(i in name){print i “\t” role[i] “\t” name[i]}}’ awk.txt
在这里插入图片描述
或者新建一个awk.sh
在这里插入图片描述
在这里插入图片描述

发布了13 篇原创文章 · 获赞 7 · 访问量 654

猜你喜欢

转载自blog.csdn.net/qq_41415294/article/details/105447721
今日推荐