Linux命令之文本处理(一)

  • wc命令

    用来统计文件的字符数、行数、单词数等,很常用的命令(面试的时候竟然没想起来这个命令,我是有多么挫。。。)

    使用格式为:wc options file-lists,若file-lists为空或“-”,则表示从标准输入读入数据;options为空的时候,默认输出的数据依次是行数、单词数、字节数,如下:

    m@meng:~$ wc examples.desktop
    240  569 8980 examples.desktop

下面介绍各个选项:

  • -c:只显示字节数,注意是字节而不是字符,不同语言的一个字符占据的字节数是不同的,一个英文字母一般只占一个字节。
        m@meng:~$ cat new
        a
        m@meng:~$ wc -c new
        2 new

文件new中只有一个字母a,但是统计结果却是2个字节,这是因为,wc把文件末尾的换行符也统计在内,这个换行符也是挺有趣的,改天我会写一篇文章分析一下。

  • -m:只显示字符数,用汉语实验一下:
        m@meng:~$ cat new
        你好
        m@meng:~$ wc -c new
        7 new
        m@meng:~$ wc -m new
        3 new

算上换行符,的确只有三个字符;但是占用的字节数却是7,说明一个汉字占用3个字节。

  • -l:只显示行数
  • -L:显示最长行的长度,如下:
    m@meng:~$ cat new
    baa
    m@meng:~$ wc -L new
    3 new

由此可见,行的长度不包含行尾换行。

- -w:显示单词数,准确的含义是: A word is a non-zero-length sequence of characters delimited by white space.

  • sort命令

    看来排序是计算机的一个刚性需求,无论哪个领域似乎都需要排序。sort用来对文件的行进行排序,输出排好序的结果,不改变源文件。

    sort进行排序的单位是行,它会从每行的第一个字母开始比较,按照第一个字母的ASCII值从小到大排列行;若某两行的第一个字母相同,则比较它们的第二个字母,以此类推。但是,这种排序会受到locale环境变量的影响,不一定出现想要的结果,如下:

    m@meng:~$ cat new
    apple 3
    Apple 7
    pear 6
    pear  4
    banana 1
    orange 8
    m@meng:~$ sort new
    apple 3
    Apple 7
    banana 1
    orange 8
    pear  4
    pear 6

    按照ASCII的话,Apple应该排在第一行,但是它却出现在第二行,这是因为当前的locale是zh_CN,修改后如下:

    m@meng:~$ export LC_ALL=C
    m@meng:~$ sort new
    Apple 7
    apple 3
    banana 1
    orange 8
    pear  4
    pear 6

    注意,修改成en_US是不管用的,改成C是因为 manual中有句话“The locale specified by the environment affects sort order. Set LC_ALL=C to get the traditional sort order that uses native byte values”,现在按照想要的方式排序了。

    • -t与-k选项

      sort命令更强大或更常用的功能是对格式化的行进行排序,格式化是指每行由某个分隔符分成了有规律的几段,这样以来就可以指定按照哪个段来排序,而不是像普通的排序那样从每行的开头逐个字符比较。如果每行的数据是不规律的,那么按字段排序是无效的。

      -t用来指定分隔符,-k用来指定哪个字段,字段从1开始计数。例如:

      m@meng:~$ sort -t " " -k 2 new
      banana 1
      apple 3
      pear  4
      pear 6
      Apple 7
      orange 8

      默认的分隔符是那些空白字符,如空格,tab等,对这些分隔符可以省略-t,所以上面的-t ” “是多次一举;分隔符只能是单个字符,所以一般不用加引号。

      可以指定多个-k选项,比如-k 2 -k 3,表示先按第二个字段排序,当第二个字段相同时,按第三个字段排序。-k还有一些更复杂的用法,参见man。

    • -n选项

      按照数字大小排序。默认情况下,文本中的数字是被当做普通字符串的,而不是真正的数字。我们现在把文本中的orange数量改成11,没有-n时如下:

      m@meng:~$ sort new -k 2
      banana     1
      orange     11
      apple  3
      pear   4
      pear   6
      Apple  7

      orange被排在第二行,这是典型的字符串排序方式。加上-n之后,如下:

      m@meng:~$ sort new -k 2 -n
      banana     1
      apple  3
      pear   4
      pear   6
      Apple  7
      orange     11
    • -r选项:反向排序。配合-k选项时,可以直接写在字段数后面。
    • -o选项:相当于重定向,指定输出文件,排序结果不再输出到标准输出,而是到指定的文件中。
    • -c选项:并不真正排序,只是检查文件是否已经排好序。
    • -u选项:除去重复的行。有人认为也可以配合-k除去某字段值相同的行,我试验了一下,似乎不行,如下:
      m@meng:~$ sort new -k 1 -u
      Apple    7
      apple    3
      banana   1
      orange   11
      pear     4
      pear     6

      看来要两行完全相同才能除去。

    • -d选项:只考虑字母和空白字符,其他字符自动忽略,如# $ %等。
    • -f选项:忽略大小写。
    • -i选项:忽略非打印字符。

      主要的就是这几个选项了,以后遇到其他不错的选项再补充。

时间: 2025-01-03 02:47:09

Linux命令之文本处理(一)的相关文章

如何使用linux命令统计文本中某个单词的出现频率

使用这个命令查出文本中的单词出现频率按照由高到底排序 cat words.txt |tr -cs "[a-z][A-Z]" "[\012*]"|tr A-Z a-z|sort|uniq -c|sort -k1nr -k2|head -10 但是有时我们想查找出某一个单词的出现频率这时我们可以使用如下几个命令 文件名称:file  查找单词名称:word 操作命令: (1)more file | grep -o word | wc -l (2)cat file | g

linux命令 sort文本去重

对于sort 可以输出 不重复的字段的用法 sort -u <taskfile> 扩展 命令 sortx.sh #!/bin/bash /bin/sort -u $1 -o $1 此命令扩展 的意图 去除指定的文件中重复的单字 并写回原文件 这个命令对于基于文本处理并作模型构建的同学有方便之处 不必要自己写去重工具了

Linux命令-vim文本编辑器|文件查找

一.vim文本编辑器 vi      vim      emacs   gedit ---------------------------------------------------------------------------------------- [[email protected] Desktop]# whereis vi vi: /bin/vi /usr/share/man/man1p/vi.1p.gz/usr/share/man/man1/vi.1.gz [[email pr

Linux命令之文本处理(二)

cut命令 cut命令用来操作文件的列,可以视为列编辑器:与之对应是大多数的行"编辑器",如sed.grep.sort等,它们操作文本时,以行为单位. cut的主要功能就是输出文本的某一列或几列.对于英文文本,一个字符就占据一列,所以输出几列就是输出几个字符. 主要选项如下: -c : 指定要输出的列数,可以是单个数字,也可以是如3-5之类的范围. m@meng:~$ cat new apple 3 Apple 7 pear 6 pear 4 banana 1 orange 11 m@

Linux命令之文本搜索工具grep、egrep、fgrep

grep即global search regular expression_r(RE) and print out the line,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. grep家族包括grep.egrep和fgrep:egrep是grep的扩展:fgrep查找一个或多个与给出的字符串或词组相匹配文件中的行,不支持规则表达式 语法:grep [OPTIONS] PATTERN [FILE...] 常用参数选项 --color=auto:对匹配到的串做高亮

Linux命令:文本处理工具awk详解一

awk命令简介: awk是一个强大的文本分析工具,通常,awk是以文件的每一行,为处理单位的.awk每接收文件的一行,然后执行相应的命令,来处理文本.  1.命令格式: awk 'pattern {action}'{filenames} 其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所 执行的一系列命令.花括号({})不需要在程序中始终出现,但它们用于根据特定的 模式对一系列指令进行分组. pattern就是要表示的正则表达式,用斜杠括起来. 调用a

linux命令之文本查看

vi掌握练习: 英文文档,相同的单词复制粘贴光标移动编辑等操作: cat:显示文件所有内容,小文件查看时使用. 缺点:文件大时不方便查看,文件很大时,会抢占系统资源,会出现命令崩溃. [[email protected] ~]$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:

Linux命令行下的vim文本编辑器

Linux命令行下的vim文本编辑器 vim文本编辑器是一个非常强大的工具,可以做很多事情,比如新建文件,打开文件,编辑文件,保存文件,同时打开多个文件等.下面总结一些常用的vim 编辑器命令: 1. 进入vim编辑器的方式:(进入vim编辑器时,默认的模式是“命令模式”) 在终端输入 vi:进入vim编辑器 vi filename:进入vim编辑器,新建了一个filename文件,光标定位到文件的第一行 vi在工作时,会在当前目录下创建.swp的临时文件,该临时文件也称为交换文件 当vi结束对

Linux中关于文本查看和处理的常用命令

            Linux中关于文本查看和处理的常用命令 一.学习目标         掌握以下命令:             查看文本: cat .tac.more.less.head.tail             文本处理:cut.sort.uniq.wc.tr 二.查看文本命令        cat : 连接并显示文本 cat [options] file,... -n :显示行号 -E :显示结束符$ more :分屏查看文件 space键: 向后翻一屏 b键:向前翻一屏 e