数据的处理
来源:互联网 发布:java 自行车 编辑:程序博客网 时间:2024/06/11 00:35
在使用Linux的时候,我们可能需要对一些命令所输出的数据进行处理,最终得到我们想要的数据。下面我们就来学习一下跟数据处理相关的命令。
管道命令 (pipe)
管道命令使用的是“ | ” 这个符号来表示,下面先使用一个栗子来讲解这个命令。
栗子:假设想查看~/PipeComand
这个文件中是否存在“pipe2”这个字符串。
使用cat PipeCommand
产生的standard output 经过“ | ”处理,作为grep 'pipe2'
的standard input(下节将讲解grep命令)。注意! “ | ”不会处理standard error output。下面在用图解释一下“ | ”命令。
在“ | ”后面只能是命令,而且这个命令必须能接收standard input, 这样的命令才是管道命令。例如 less,more等等,而ls,cp,mv 不能接收standard input,所以就不是管道命令。
筛选数据:cut,grep
cut
这个命令是以“一段”数据为单位进行处理的命令,下面先介绍这个命令常用的参数。-d : 后面写你要想分割的字符(只能使用一个字符作为分割符),与 -f 一起使用。
-f : 使用-d 将一段数据分成若干段之后,在根据 -f 选取出那几段。
-c : 以位置进行分割。
–color=auto :将匹配到的字符加上高亮。
下面做些栗子来演示:
栗子一
这里使用一个空格' '
为分割符,将CutCommand文件的一段数据分为4段,-f 2
表示选取第而段。还可以使用2,3来选取第二段和第三段。
first second third fifth 1 | 2 | 3 | 4
栗子二
-c 1
就是输出第一个字符。 也可以使用-c 1-10
输出第1个到第10个字符。
grep
这个命令则是对“一行”进行操作。下面是这个命令的一些常用到的参数。-c : 计算
'想要查找的字符'
出现的次数。-i : 查找的时候忽略大小写。
n : 输出行号。
v : 逆向操作,即查找不符合
'想要查找的字符'
的数据。
下面做些栗子来演示:
栗子一
将ll
中的有Grep的行输出。这个命令支持模糊查询。栗子二
与栗子一相反,将ll
中没有Grep的行输出。栗子三
在使用grep命令查除文件详细的信息后,在使用cut命令截取出文件名。
排序命令: sort, uniq, wc
sort
这是一个以‘列’来排序的命令,可以根据数字,字母,月份等进行排序(默认是以字母排序)。下面是这个命令常用的一些参数-f : 忽略大小写。
M : 以月份进行排序。
n : 以数字从小到大排序。
u : 如果有相同的数据,但只显示一条。
t : 以[tab]键分割。
k : 以那个区间进行排序。
下面做些栗子来演示:
栗子一
这里需要注意的是,sort是以列排序的,所有66只有第一个6参与到排序中。
栗子二
这里以空格分割' '
,并选择第二列进行排序。
uniq
这个命令根据行来去除重复的数据。下面是这个命令常用的参数。-i : 忽略字母大小。
-c :计算有多少条重复的数据。
下面做些栗子来演示:
栗子一
计算有多少条重复的数据。wc
这个命令是计算文件里面有多少行,多少字,多少字符(默认是全部显示)。下面是这个命令常用的参数。l : 只显示有多少行。
w : 只显示有多少个字(英文字母)。
m : 多少个字符。
这个命令很简单就不再演示了。
双向重定向 :tee
是用>
可以将数据流传送给设备或者一个文件,但如果我们想继续使用这个数据流该怎么办。这是哟时候就可以是用tee
这个命令。
这里先将ll
产生的数据输出流使用tee ll
导入到ll文件中,但此时这个流还会往下流动,当作grep -v 'total'
的数据输入流。
字符串转换与合并:tr,paste
tr
这个命令可以用于删除数据中的文字,或者转换字母大小写等等功能。下面是这个命令常用的一些参数。-d : 删除指定的字符串。
-s : 替换指定的字符。
下面做些栗子来演示:
栗子一
这里将ll
命令所输出的数据中所有的小写字母转换成大写字母。此命令可以使用正则表达式。栗子二
这里将ll
命令所输出的数据中的空格删除。
paste
此命令可以将两个文件的内容合并。下面是这个命令常用的一些参数。-d : 后面接分隔符,默认是以[tab]分割。
- :这个符号表示来自standard input。可以代替文件。
下面做些栗子来演示:
栗子一
这里将ls命令所输出的数据与PasteCommand文件合并在一起。中间以?隔开(如果有多个特殊字符,只会以第一个字符分割), 这里的 - 是表示ls所产生的standard output。
命令是否执行的依据
在许多的编程语言中,逻辑表达式往往是不可或缺的一部分。在Linux中也存在着相关的命令可以达到逻辑表达式的效果。下面我们就来一起学习这部分的知识。
一次回车执行多条命令的操作
在两个命令中使用“;”可以使这两个命令连续执行。例如下面这样:
这里使用mkdir test
先创建test目录,然后将工作目录切换到前一命令创建的目录中。但是这段命令可能会报错,因为如果test目录已经存在的话,则会报错。也就是说,现在这两个命令存在关联性。那么此时我们就可以使用Linux中的逻辑符号来解决这个问题。逻辑符号:&&,ll
在Linux中,每一个命令的执行之后,都会有一个回传码。如果命令执行成功,则会回传一个数字0作为成功执行的标识,如果失败,则是1。值最后会被存储在$?这个变量中。现在我们已经知道命是否令已经执行成功了,下面是该两个逻辑符号的说明:
&&
- cmd1 && cmd2 :若cmd1执行后,回传码为0,则开始执行cmd2; 若cmd1执行后,回创码为1,则comd2不执行。
||
- cmd1 || cmd2: 若cmd1执行后,回传码为0,则cmd2不执行;若cmd1执行后,回传码为1,则开始执行cmd2。
栗子
栗子1 : 判断是否有
~/LogicCommandFolder
目录。如果有则将工作目录切换到该目录下面,并在该目录下创建文件名为LogicCommandFIle的文件。没有则什么都不做。
这里只以~/LogicCommandFolder
目录存在为例子,所有先创建该文件。由于有该目录,所有表达式1的回传码为0,并且已经将工作目录切换到该目录,然后再在该目录下创建LogicCommandFIle文件。栗子2 : 根据
~/
目录下是否有LogicCommand文件,如果有则不进行任何操作,没有就创建该文件(但是控制会有错误信息)。
这是没有LogicCommand文件的情况下执行之后的效果,可以看到cat ~/LogicCommand
执行的时候,由于没有LogicCommand文件所有控制台报出了一段错误信息,并且回传码是1。所以
开始执行touch ~/LogicCommand
。栗子 : 不管有没有
~/tmp/chestnut/
目录存不存在,都在该目录下创建文件名为anyway的文件。
这个条命令会有两条执行路线:如果
/tmp/chestnut/
目录不存在,则回传码是1,所以开始执行mkdir /tmp/chestnut
命令创建该目录,因为这段命令会成功执行,所以回传码为0,后面执行touch /tmp/chestnut/anyway
命令来创建anyway文件。如果
/tmp/chestnut/
目录存在,则回传码是0,而||
遇到回传码为0所以不执行mkdir /tmp/chestnut
,接下来,回传码0会继续往右传递,因为右边是&&
,所以执行touch /tmp/chestnut/anyway
命令来创建anyway文件。
数据流重定向是什么
一般来说,我们使用命令行来操作Linux,那这跟数据流重定向又有什么关系呢?举个栗子,假设你需要将一个命令所输出的信息存储到一个文件里面该怎么办?,那么数据流重定向就能解决这个问题。一般来说你执行一个命令通常它会是下面这张图所示的,
当我们执行一个命令时,这个命令可能会先从文件读取数据,经过处理之后,再将数据输出到屏幕上。输出可以分为标准输出(standard output)和标准错误输出(standard error output)。
- 标准输出与标准错误输出
标准输出指的是命令是指命令执行成功所传回来的正确信息,而标准错误输出则是命令执行失败之后所传回来的信息。比如,我使用这个cat命令来展示文件信息,如果被展示的文件存在,则会将文件的内容输出到屏幕上,而这就是标准输出。如果被展示的文件不存在,则会将错误信息输出到屏幕上,而这就是标准错误输出。如果我们想把正确的信息和错误的信息分开存储到不同的文件中,则可以使用下面这些特殊字符:
- 标准输出(stdout) : 代码为1,使用>或>>。
- 标准错误输出(stderr): 代码为2,使用2>或2>>。
下面是具体的用法:
把ls .
命令输出的信息通过>
(也可以写成1>)存储到dataflow这个文件中,如果dataflow文件存在,则会创建这个文件,并把ls .
命令的输出的信息存储到这个文件中(如果此文件已经有内容则会被覆盖),所有的数据流操作都是如此。如果不想文件内容被覆盖则可以使用下面这个命令。
是里使用>>
(也可以写成1>>)将echo $PATH
输出的信息累加到dataflow
文件中。下面是标准错误输出的用法。
使用2>
则可以将错误的信息存储到指定的文件中。如果不想指定文件的内容不被覆盖则可以使用2>>
,把错误信息和正确信息存储到一个文件中可以使用&>
。这里就不在多做演示。如果想将正确的信息和错误的信息分别存储不同的文件中则可以使用下面这个用法。
find /home -name .bashrc
命令会查找/home
目录是否有.bashrc
文件的存在。因为该命令会检查所有指定目录下的文件,而这些文件不一定有足够的权限可以访问,所以可能会引发权限不足的错误信息。在这个用法中,使用>
将正确的信息存储到RightInfo中,把错误的信息存储到ErrorInfo中。
/dev/null信息垃圾桶设备
这个设备的用处是用是,如果你不想错误信息输出到屏幕上,并且也不存储到文件中,就可以将信息输出到这个设备中。这个设备会将错误信息吃掉。下面是用法:
参考
《鸟哥的Linux私房菜》
如此文章有不对地方请多多指正!
- 树形数据的处理
- DataSet数据的处理
- 树形数据的处理
- 树形数据的处理
- 树形数据的处理
- 树形数据的处理
- 树形数据的处理
- 树形数据的处理
- 树形数据的处理
- 树形数据的处理
- 树形数据的处理
- 树形数据的处理
- 树形数据的处理
- 树形数据的处理
- 树形数据的处理
- 海量数据的处理
- Json数据的处理
- 数据的标准化处理
- 一个BS框架工程搭建笔记
- strcpy时如何有效的在堆区申请内存
- 面向对象第三个特征----多态II(类型判断)
- 【POJ 3436 ACM Computer Factory】网络流 & 拆点 & Dinic
- Java IO流分析整理
- 数据的处理
- 逻辑思维3
- java中的Object与异常
- NIO
- Go语言打印调用堆栈
- 大米互助
- OpenGl的glMatrixMode()函数理解
- think in java 笔记(一) final关键字
- hql如何使用count