与管道相关的几个命令处理

来源:互联网 发布:显卡优化不了游戏 编辑:程序博客网 时间:2024/06/09 13:59

如果我们需要获取数据,而原始数据需要经过一系列的过滤、分析、处理后才是我们需要的,那么bash脚本里,需要使用管道"|"来处理。

管道只处理前一个命令输出到stdout的信息。管道处理是以行为单位(段)来处理前一个命令的输出,以回车换行为标致。

(一)部分截取cut 

截取命令是针对一行一行来进行的。

cut 指定分隔符进行分割,然后指定截取哪些“域”(列),在处理多空格的时候有些麻烦。

-d :指定分隔字符。
-f :-d分隔后,截取哪些列,从1开始。
-c :以字符 为单位取出固定字符区间,-c 12-20表示取12个字符到20个字符之间的段

(二)整行过滤截取grep

grep命令,分析一行中,如果有我们想要的信息,就将改行整个取出来

-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行

(三)排序sort

默认以第1列来排序,按字符顺序排序,常见参数如下:

-f :忽略大小写 
-b :忽略最前面的空格;
-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n :按数字进行排序(默认以文字型态来排序的);
-r :反向排序;
-u :就是 uniq ,相同的数据中,仅出现一行代表;
-t :指定分隔符,默认 tab ;
-k :以那个区间 (field) 来进行排序的意思,

(四)相同元素统计uniq,通常在sort后,重复的信息行删掉,只显示一项,参数如下:

-i :忽略大小写字符的不同;
-c :进行计数

(五)统计wc,统计文件里信息有多少行、多少字符、多少字,参数如下:

-l 行

-w 字

-m 字符

(六)处理的数据流双向导出,处理数据流既想导出到文件,又想在管道里继续处理,使用 tee

tee [-a] file
ifconfig |grep mtu |cut -d ':' -f 1|tee ifname.txt |awk '{print $1}'


(七)对信息流进行删除字符或替换字符 tr

参数:
-d :删除信息流中的某个字符串
-s :取代掉重复的字符


(八) tab键和空格键的相互替换 col

-x  将对等数量的tab转成空格

-h 将对等数量的空格转成tab


(九)join命令,合并文件,如果2个文件有相同类型&值的列,通过相同列将这2个文件联合起来,以便以后处理 

-t :join 默认以空格符分隔数据,并且比对第一列字段为合并相同列,如果两个档案相同,则将两笔数据联成一行,且第一个字段放在第一个。
-i :忽略大小写
-1  x:第一个文件以第x列作为合并相同列
-2  y:第一个文件以第x列作为合并相同列


(十)paste 将两个文件,以行为单位,直接粘贴在一起

-d :指定分隔字符,默认 [tab] 来分隔的!
- :如果 file 部分写成 - ,表示其中一个文件来自standard output。

cat a.config |paste b.config c.config -     标识将a.config ,b.config,c.config 合在一起


(十一)expand 将 [tab] 按键转成空格键

-t :后面可以接数字,标识替换为多少个空格

cat /etc/man.config |expand -t 4 |cat -A


(十二)split 分割文档

-b 按大小来分割,单位是b k m 

-l 按行数来分割


(十三)xargs 参数代换

xargs 可以读入 stdin 的数据,并且以空格符或断行字符作为分辨,将 stdin 的资料分隔成为 arguments。xargs 后面没有接任何的指令时,默认是以 echo 来进行输出

cut -d':' -f1 < /etc/passwd |head -n 3| xargs finger


(十四)减号 - 的用途

某些指令需要用到文件名称 (例如 tar) 来进行处理时,该 stdin 与 stdout 可以利用减号 "-" 来替代。

 tar -cvf - /etc/passwd  |tar -xvf -








0 0