Linux数据处理的几个命令

发布时间:2024年01月13日

Linux数据处理的几个命令

仅个人想法,会持续不间断更新和改进。

Linux系统中的数据处理,可搜索,需排序、减重复。

文件内容搜索利器 - grep

Linux grep 命令用于查找文件里符合条件的字符串。

官方定义为:

grep, egrep, fgrep - print lines matching a pattern

grep支持正则表达式,是一个强大的文本搜索工具。

语法

语法也挺复杂,因为功能确实很强大。

$ grep [OPTION...] PATTERNS [FILE...]
$ grep [OPTION...] -e PATTERNS ... [FILE...]      # 使用egrep
$ grep [OPTION...] -f PATTERN_FILE ... [FILE...]  # 使用fgrep

常用的参数为:

  • -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同
  • -v 或 --invert-match : 显示不包含匹配文本的所有行
  • -i 或 --ignore-case : 忽略字符大小写的差别
  • -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。

假定有如下3个文件,1个文件夹,内容如下:

a
    This is a
    Hello a
    
b 
    this is b
    Hello b
c 
    This is c
    Hello c

d/d 
    This is d
    Hello d

默认无参数

在当前目录搜索包含is字符串,可以看到**a/b/c**三个文件均有输出,而d因为是目录,暂时无输出。

$ grep is *
a:This is a
b:this is b
c:This is c
grep: d: Is a directory

增加文件夹

与其他命令类似,增加-r参数,递归搜索

$ grep -r is *
a:This is a
b:this is b
c:This is c
d/d:This is d

反向查找

在某些情况下,或许正想找到不包含某些字符串的内容,如下:

$ grep -rv is *
a:Hello a
b:Hello b
c:Hello c
d/d:Hello d

此时可以看到,不包含is的内容显示了出来。

不区分大小写

而某些情况下,或许我们希望找到不区分大小写的内容,比如对于This/this而言:

$ grep -r This *
a:This is a
c:This is c
d/d:This is d

$ grep -ri This *
a:This is a
b:this is b
c:This is c
d/d:This is d

可以看到此时有可能笔误,或者其他原因的b文件已经被找到了。

显示行数,精准定位

如果文件内容比较多,此时显示内容在哪一行,是很重要的,加上-n参数既可解决。

$ grep -rn This *
a:1:This is a
c:1:This is c
d/d:1:This is d

没有规矩不成方圆 sort

Linux sort 命令用于将文本内容进行排序。

官方定义为:

sort - sort lines of text files

语法

$ sort [OPTION]... [FILE]...
$ sort [OPTION]... --files0-from=F

常用的参数为

  • -c 检查文件是否已经按照顺序排序。
  • -u 意味着是唯一的(unique),输出的结果是去完重了的。
  • -r 以相反的顺序来排序。
  • -k field1[,field2] 按指定的列进行排序。

这里假定测试文件名为testfile

LiSi            80

ZhangSan        70

WangWu          90

MaLiu           88

默认无参数

在使用 sort 命令以默认的式对文件的行进行排序,命令如下:

$ sort testfile 



LiSi            80
MaLiu           88
WangWu          90
ZhangSan        70

sort 命令默认情况下将第一列以 ASCII 码的次序排列,并将结果输出到标准输出。

根据第N列排序

对于测试文件而言,或许我们更希望使用数字来统计排序,此时可以使用-k N参数,其中N为列数

$  sort testfile -k 2



ZhangSan        70
LiSi            80
MaLiu           88
WangWu          90

检查是否已经排序

在某些情况下,或许只想看看文件是否已经排序,使用-c参数 :

$  sort -c testfile
sort: testfile:2: disorder

如果没有排序会有输出,而排序的话就没有输出。

逆序排列

如果希望看一下数字从高到低的培训,使用-r参数:

$  sort testfile -k 2  -r
WangWu          90
MaLiu           88
LiSi            80
ZhangSan        70

你是唯一的 uniq

Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。

官方定义为:

uniq - report or omit repeated lines

uniq 可检查文本文件中重复出现的行列。

语法

语法比较简单,直接用就可以。

$ uniq [OPTION]... [INPUT [OUTPUT]]

常用的参数为:

  • -c--count 在每列旁边显示该行重复出现的次数。

  • -d--repeated 仅显示重复出现的行列。

  • -u--unique 仅显示出一次的行列。

假定有1个文件为testfile,内容如下:

testfile
	Hello 1
	Hello 2
	Hello 2
	Hello 3
	Hello 3
	Hello 3
	Hello 4
	Hello 4
	Hello 4
    Hello 4

默认无参数

使用uniq 命令可以删除重复的行,不管有多少重复的行,仅仅显示一行。

$  uniq testfile
Hello 1
Hello 2
Hello 3
Hello 4

统计出现频次

如果希望统计每一行出现的频次,可以使用-c参数,其中第一行输出为出现的次数

$  uniq -c testfile
      1 Hello 1
      2 Hello 2
      3 Hello 3
      4 Hello 4

仅仅显示重复的行

在某些情况下,或许只想看到有重复的列,使用-d参数 :

$  uniq -d testfile
Hello 2
Hello 3
Hello 4

仅仅显示不重复的行

而某些情况下,或许只想看到不重复的列,使用-u参数:

$  uniq -u testfile
Hello 1
文章来源:https://blog.csdn.net/shaoguangleo/article/details/135575662
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。