Linux数据处理的几个命令

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

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

真假转换之间 tr

Linux tr 命令用于转换或删除字符。

tr 命令可以从标准输入读取数据,经过字符串转译后,将结果输出到标准输出。

官方定义为:

tr – translate or delete characters

使用方法为:$ tr [OPTION]… SET1 [SET2]

其中常用的三个选项为:

  • -d, --delete:删除指令字符
  • [:lower:] :所有小写字母
  • [:upper:] :所有大写字母
  • [:blank:] :所有空格

a-z小写全部转换为大写

默认无参数的显示$ echo “Hello World, Welcome to Linux!” | tr a-z A-ZHELLO WORLD, WELCOME TO LINUX!
# 还有一种方法$ echo “Hello World, Welcome to Linux!” | tr [:lower:] [:upper:]HELLO WORLD!

A-Z大写全部转换为小写

默认无参数的显示$ echo “Hello World, Welcome to Linux!” | tr A-Z a-zhello world, welcome to linux!
# 还有一种方法$ echo “Hello World, Welcome to Linux!” | tr [:upper:] [:lower:]hello world, welcome to linux!

貌似起名可以用这个

很多变量或者函数起名字都会移除元音字符,可以考虑使用-d参数,如下:$ echo “Hello World, Welcome to Linux!” | tr -d a,o,e,iHll Wrld Wlcm t Lnux!

不过感觉删除的多了,也不一定是好事。。。

比如里外看Wlcm不晓得啥意思

移除文件中的所有空格

同理,使用-d,结合[:blank:]可以快速删除所有空格。$ echo “Hello World, Welcome to Linux!” | tr -d [:blank:]HelloWorld,WelcometoLinux!

文件内容搜索利器 – grep

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

官方定义为:

grepegrepfgrep – 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 bc   This is c   Hello c
d/d   This is d   Hello d

默认无参数

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

增加文件夹

与其他命令类似,增加-r参数,递归搜索$ grep -r is *a:This is ab:this is bc:This is cd/d:This is d

反向查找

在某些情况下,或许正想找到不包含某些字符串的内容,如下:$ grep -rv is *a:Hello ab:Hello bc:Hello cd/d:Hello d

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

不区分大小写

而某些情况下,或许我们希望找到不区分大小写的内容,比如对于This/this而言:$ grep -r This *a:This is ac:This is cd/d:This is d
$ grep -ri This *a:This is ab:this is bc:This is cd/d:This is d

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

显示行数,精准定位

如果文件内容比较多,此时显示内容在哪一行,是很重要的,加上-n参数既可解决。$ grep -rn This *a:1:This is ac:1:This is cd/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            80MaLiu           88WangWu          90ZhangSan        70

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

根据第N列排序

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

ZhangSan        70LiSi            80MaLiu           88WangWu          90

检查是否已经排序

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

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

逆序排列

如果希望看一下数字从高到低的培训,使用-r参数:$  sort testfile -k 2  -rWangWu          90MaLiu           88LiSi            80ZhangSan        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 testfileHello 1Hello 2Hello 3Hello 4

统计出现频次

如果希望统计每一行出现的频次,可以使用-c参数,其中第一行输出为出现的次数$ uniq -c testfile      1 Hello 1      2 Hello 2      3 Hello 3      4 Hello 4

仅仅显示重复的行

在某些情况下,或许只想看到有重复的列,使用-d参数 :$ uniq -d testfileHello 2Hello 3Hello 4

仅仅显示不重复的行

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

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/391405.html

(0)
联系我们
联系我们
分享本页
返回顶部