Linux学习(4)——高级命令行文本处理工具(cut,sed,awk)

1 cut

从一个文本文件或者文本流中提取文本列。

1.1 cut语法

cut -d'分隔字符' -f fields <==用于有特定分隔字符
cut -c 字符区间            <==用于排列整齐的信息
选项与参数:
-d  :后面接分隔字符。与 -f 一起使用;
-f  :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c  :以字符 (characters) 的单位取出固定字符区间;

这里写图片描述

只显示 /etc/passwd 的用户和shell
这里写图片描述
这里写图片描述

2 sort

对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。
sort [-fbMnrtuk] [file or stdin]

选项与参数:
-f  :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b  :忽略最前面的空格符部分;
-M  :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n  :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r  :反向排序;
-u  :就是 uniq ,相同的数据中,仅出现一行代表;
-t  :分隔符,默认是用 [tab] 键来分隔;
-k  :以那个区间 (field) 来进行排序的意思
  • 对/etc/passwd 的账号进行排序(sort 是默认以第一个数据来排序,而且默认是以字符串形式来排序,所以由字母 a 开始升序排序。)
    这里写图片描述

  • etc/passwd 内容是以 : 来分隔的,以第3栏来排序
    这里写图片描述

  • 默认是以字符串来排序的,如果想要使用数字排序
    这里写图片描述

  • 默认是升序排序,如果要倒序排序
    cat /etc/passwd | sort -t ':' -k 3nr

  • 查看/etc/passwd有多少个shell:对/etc/passwd的第七个域进行排序,然后去重:
    cat /etc/passwd | sort -t':' -k 7 -u

3 uniq

可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。
uniq [-icu]

选项与参数:
-i   :忽略大小写字符的不同;
-c  :进行计数
-u  :只显示唯一的行

新建一个testfile文件
这里写图片描述
直接删除未排序的文件,发现没有变化
这里写图片描述
排序后去重
这里写图片描述
排序之后删除了重复行,同时在行首位置输出该行重复的次数
这里写图片描述

4 wc

统计文件里面有多少单词,多少行,多少字符。wc [-lwm]

选项与参数:
-l  :仅列出行;
-w  :仅列出多少字(英文单字);
-m  :多少字符;
  • 43是行数,86是单词数,2234是字节数
    这里写图片描述

5 sed

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等

6 awk

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

6.1 调用awk的三种方式

  1. 命令行方式
    awk [-F field-separator] 'commands' input-file(s)
    其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
    在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

  2. shell脚本方式
    将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
    相当于shell脚本首行的:#!/bin/sh
    可以换成:#!/bin/awk

  3. 将所有的awk命令插入一个单独文件,然后调用:
    awk -f awk-script-file input-file(s)
    其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。

6.2 练习

  • 显示最近登录的5个账户
    这里写图片描述
    这里写图片描述
  • 显示 /etc/passwd 的账户
    这里写图片描述
  • 显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
    这里写图片描述
  • 显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,
    而且在所有行添加列名name,shell,在最后一行添加”blue,/bin/nosh”。
    这里写图片描述

猜你喜欢

转载自blog.csdn.net/u012292754/article/details/80904972