cut
cut就是“切”的意思,这个命令可以将一段信息的某一段“切”出来,处理的信息是以“行”为单位。
用法:
1.
cut-d'分隔符' -f
fields
echo $PATH >
test
echo $PATH | cut -d':' -f 5
>> test
echo $PATH | cut -d':' -f3,5
>> test
more
test
/sr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
/usr/bin
/usr/local/bin:/usr/bin
注意:如果用cut命令从文件中析取字段,而又没有指定分隔符,cut就用制表符作为默认字段分隔符。
2.
cut -c字符范围
cut-cn1-n2
file(其中n1和n2是列号,n2可以省略,则缺是从n1截取到该列最后一个字符)
例如:
date |cut -c1-4
2012
date |cut -c31-
16:11:22CST
3.
linux命令获取指定字段:前N个,第X个,最后一个,去除最后一个,去除指定字段等
使用awk 和 cut 联合
前N个:cut -d 分隔符 -f -N
第X个:cut -d 分隔符 -f X
最后一个:awk -F 分隔符 '{pint $NF}'
去除最后一个:awk -F 分隔符 '{print | "cut -d 分隔符 -f
-"(NF-1)}'
去除指定字段X:awk -F 分隔符 ’{print | "cut -d 分隔符 -f
1-X,X-"(NF)}'
下边俩都是在awk 里调用 cut 执行
paste
在某种意义上,paste命令就是与cut相反。它不是把行分开,而是把多行合在一起。paste命令的一般格式:paste
files
其中files制定的那些文件中的对应行形成一行,然后写入标准输出。在files中可以用破折号(-)表示从标准输入获得输入。
假如这里有两个文件,name和grade。
more name grade
::::::::::::::
name
::::::::::::::
Barbara
Alie
Susan
Tony
::::::::::::::
grade
::::::::::::::
99.0
76.0
89.0
100.0
从标准输入获得数据:
paste name -
>tt
12
13
14
15
more tt
Barbara 12
Alie
13
Susan
14
Tony
15
将两个文件合并成一个文件:
paste name grade
>>info
cat info
Barbara 99.0
Alie
76.0
Susan
89.0
Tony
100.0
文件中的每一行都与其他文件中相同行显示在一起,中间用制表符分隔,如果不想用制表符分隔可以用-d制定分隔符。
paste -d: name grade
>info
cat info
Barbara:99.0
Alie:76.0
Susan:89.0
Tony:100.0
-s选项告诉paste把同一文件中的行粘贴在一起,而不是从其他文件。如果制定一个文件名,其效果就是把文件中的所有行合并成一行,原来各行之间用制表符或者用-d选项制定的分隔符分隔。
paste -s name
Barbara Alie Susan Tony
ls / | paste -d' ' -s
bin
boot cdrom dev etc home host initrd.img initrd.img.old lib
lost+foundmedia mnt opt proc root run sbin selinux srv sys tmp usr
var vmlinuzvmlinuz.old
tr
tr可以用来删除一段信息当中的文字,或者是进行文字信息的替换。
grep
grep分析一行信息,若当中有我们所需要的信息就将该行取出来,简单的语法是这样的:
grep
[-acinv] [--color=auto] '查找的字符串'filename
参数:
-a将binary文件以text文件的方式查找数据;
-c计算找到’查找字符串‘的次数;
-i查找的时候,忽略大小写
-n顺便输出行号;
-v反向选择,即显示出没有‘查找字符串’
内容的那一行
以info文件为例:
more info | grep 99
Barbara:99.0
more info | grep -vcn
99
3
info| grep -vn 99
2:Alie:76.0
3:Susan:89.0
4:Tony:100.0
more info | grep -n
'[A-Z]...[a-z]'
1:Barbara:99.0
3:Susan:89.0
grep是个很棒的命令,但是它的强大之处在于它能很好的处理正则表达式
sort
sort是个很有趣的命令,它可以帮我们进行排序,而且可以根据不同的数据类型来排序。例如数字和文字的排序就不一样。
用法:
sort
[-fbMnrtuk] [file or stdin]
参数:
-f:忽略大小写
-b:忽略前面的空格部分
-M:以月份的名字来排序
-n:使用“纯数字”进行排序
-r:反向排序
-u:就是uniq,相同的数据中,仅出现一行代表
-t:分隔符,默认用[tab]键来分隔
-k:以哪个区间(filed)来排序
还是以info文件为例,按成绩排序:
more info | cut -d: -f2,1 |
sort
Alie:76.0
Barbara:99.0
Susan:89.0
Tony:100.0
more info | cut -d: -f2,1 | sort
-r
Tony:100.0
Susan:89.0
Barbara:99.0
Alie:76.0
按名字进行排序:
sort -t':' -r -k1 info
Tony:100.0
Susan:89.0
Barbara:99.0
Alie:76.0
sort -t':' -r -k2 info
Barbara:99.0
Susan:89.0
Alie:76.0
Tony:100.0
(按理说应该是按成绩逆序排序的,但是结果不正确,只能说sort对域的处理没有cut好)
uniq
如果排完序以后,想要将重复的数据仅显示一列,该怎么做呢?
uniq
[-ic]
-i:忽略大小写
-c:进行计数
wc
这个命令用于统计文件中有多少字,多少行,多少字节。
用法:
wc
[-lwm]
-l:仅列出行
-w:仅列出字数
-m:多少字符
常用与统计一个目录中包含多少文件。
ls| wc -l