Linux – 对数据的处理简介

本文参考了鸟哥的Linux私房菜 

数据流重定向

我们在使用linux的时候会经常用到重定向,数据流重定向就是将某个指令执行后应该要出现在屏幕上的数据,传输到其他地方,例如文件或者是打印机之类的装置。

 

一般情况下,如果我们执行一个指令,通常它会是这样的:

 

我们执行一个命令的时候,这个指令可能会由文件读入资料,经过处理之后,再将数据输出到屏幕上。Standard output与standard error分别代表标准输出与标准错误输出。


比如我们使用find /home –name testing > list_right 2> list_error

就可以将错误的的信息定向到list_error中,正确的输出定位到list_right中。

 

命令执行的判断依据

; , && , ||

在某些时候,我们如果需要一次执行多个指令。

 

sync; sync; shutdown –h now : 表示在关机时,先执行两次sync,再shutdown计算机。

ls /tmp && touch /tmp/testingagain :表示当tmp目录存在是,我在tmp目录下建立一个testingagain文件。

ls /tmp/testingagain || touch/tmp/testingagain :表示当这个文件不存在时建立这个文件。

 

 

管道命令(pipe)

在实际使用Linux时,我们可能不能一次性取得自己需要的数据,可能需要经过好几道手续才能得到我们所需要的格式,这种就需要用到管道命令|了。

我们先来看一个简单的例子

[root@localhost ~]# ls -al /etc | less

这样,就可以将ls指令输出后的内容,被less读取,可以利用less,对内容进行前后翻动。

管道命令仅能处理经由前一个指令传过来的正确信息,就是standard output (STDOUT)的信息,对于standard error并没有直接处理的能力。

 

在linux中,很多的信息处理都是以【行】为单位的。下面我们看看怎么对结果进行分析,取出我们需要的信息。

 

截取命令

简单的来说,就是将一段数据经过分析后,取出我们所需要的。

l  cut

cut,就是将一段信息的某一段切出来

cut –d ‘分隔字符’ –f fields

cut –c 字符区间

-d :后面接分隔字符,与-f一起使用

-f :依据-d的分隔字符将一段信息分割成为数段。用-f取出第几段

-c :以字符的单位取出固定字符区间

 

l  grep

grep是分析一行数据,当其中有我们所需要的,就将改行取出来

grep [-acinv] ‘搜寻字符串’filename

-a :将binary文件以TEXT文件的方式搜寻

-c :计算找到‘搜寻字符串’的次数

-I :忽略大小写的不同

-n :顺便输出行号

-v :反向选择,即显示出没有‘搜寻字符串’内容的那一行

 

排序命令

有时候,我们需要计算一次数据里相同形态的数据总数

 

l  Sort

sort [-fbMnrtuk] [file or stdin]

-f :忽略大小写的差异

-b :忽略最前面的空格符部分

-M :以月份的名字来排序

-n :使用[纯数字]进行排序(预设以文字形态来排序)

-r :反向排序

-t : 分隔符,预设是tab键

-u :就是uniq,即相同的数据中,仅出现一行代表

-k :以那个区间(field)来进行排序的意思

 

uniq

当排序完成之后,想要将重复的资料仅显示一个

uniq [-ic]

-i :忽略大小写字符的不同

-c :进行计数

 

wc

可以帮我们计算输出的信息的整体数据

wc [-lwm]

-l :仅列出行

-w :仅列出多少字

-m :多少字符

 

l  tee

这个命令前一篇讲过,就是将这个数据流的处理过程中,将某些信息存下来。

tee [-a] file

-a :以累加的方式,将数据加入file当中

 

字符转换命令

我们有时候在处理数据的时候,会进行一些转换,比如大写改成小写等

 

l  tr

删除一段数据中的文字,或者用来进行文字信息的替换

tr [-ds] SET1 ...

-d  :删除数据中SET1这个字符串;

-s  :取代掉重复的字符!

 

l  col

很多时候,可以用来简单的处理将[tab]按键取代成为空格

col [-xb]

-x  :将 tab 键转换成对等的空格键

 

l  join

处理两个文件之间的数据

join [-ti12] file1 file2

-t  :预设以空格符分隔数据,并且比对第一个字段的数据,如果两个文件相同,则将两笔数据联成一行,且第一个字段放在第一个

-i  :忽略大小写

-1  :数字1,代表第一个档案要用那个字段来分析

-2  :代表第二个档案要用那个字段来分析

 

l  paste

将两行贴在一起,且中间以[tab]键隔开

paste [-d] file1 file2

-d  :后面可以接分隔字符,预设以[tab]来分隔

-   :如果file部分写成 - ,表示来自standardinput的资料

 

l  Expand

将[tab]按键转成空格键

expand [-t] file

-t  :后面可以接数字,一般来说,一个tab按键可以用8个空格取代,也可以进行自定义

 

分割命令

split

split [-bl] file PREFIX

-b  :后面可接欲分割成的文件大小,可以加单位,例如 b, k, m 等

-l  :以行数来进行分割

 

参数代换

xargs 产生某个指令的参数的意思

xargs [-0epn] command

-0  :如果输入的 stdin 含有特殊字符,例如 `,\, 空格等字符时,这个参数可以将他还原成一般字符

-e  :这是EOF(end of file). 后面借一个字符串,当xargs分析到这个字符串时,就会停止继续工作

-p  :在执行每个指令的argument时,都会询问使用者的意见

-n  :后面接次数。每次command指令执行时,要使用几个参数

 

减号

管道在bash的连续处理程序中非常重要。在管道中,常常会用前一个指令的stdout作为这一次的stdin,某些指令需要用到文件名称进行处理时,该stdin与stdout可以用减号“-”来替代

比如: tar –cvf - /home |tar –xvf –

将/home里的文件打包,但打包的数据不是记录到文件,而是传送到stdout,经过管道后,将打包的传送给后面,这里的”-”是取前一个的stdout。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值