您的位置:首页 > 运维架构 > Linux

Linux -- 文件统计常用命令

2016-09-25 17:04 302 查看
标签(空格分隔): Linux

sort – 文件内排序命令

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次比较其ASCII码。

按每行升序排序:

sort seq.txt


在输出行中去除重复行:

sort -u seq.txt


输出行按降序排序:

sort -r seq.txt


将输出结果重定向写入新的文件:

sort seq.txt > seq1.txt


将输出结果重定向写入原来文件:

sort seq.txt -o seq.txt


输出结果以数值而非ASCII码排序:

sort -n seq.txt


按照指定列排序:

sort -t ':' -k 2, 2nb seq.txt


-t
指定分隔符,
-k
指定按照哪一列排序

> 如果分隔符为制表符,则使用
-t $'\t'


稳定排序:

sort -s seq.txt


合并多个有序文件

sort -m seq.txt seq1.txt


uniq

对于连续重复出现的行,只会打印第一行,而不会打印其他重复行。与sort连用。

一般用法:

uniq seq.txt


打印出每行重复出现的次数:

uniq -c seq.txt


打印出出现多次(大于1次)的行:

uniq -d seq.txt


打印不存在重复行的行:

uniq -u seq.txt


忽略掉前n个域:(忽略掉前n个域,将第(n+1)以及之后的域当做关键字)

uniq -f n seq.txt


忽略掉前n个字符:

uniq -s n seq.txt


忽略掉前n个域和前m个字符:

uniq -f n -s m seq.txt


d最多比较n个字符:

uniq -w n seq.txt


cut

cut命令用于打印出一个文件中指定的某几个域,或某几个字符,或某几个字节。

按字节打印

打印每行的第n个字节:

cut -b n seq.txt


打印每行的第1-n这个范围的字节:

cut -b -n seq.txt


打印每行的第n-最后范围的字节:

cut -b n- seq.txt


打印每行的第m-n这个范围的字节:

cut -b m-n seq.txt


打印多个范围的字节:

cut -b m-n,t-s seq.txt


按字符打印

打印每行的第n个字符:

cut -c n seq.txt


剩下的情况如按字节打印。

按域打印

cut 命令默认以制表符为一个分隔符。如果要自定义分隔符,用
-d
指定。
cut -d '分隔符'


打印每行的第n个域:

cut -d '分隔符' -f n seq.txt


paste

paste命令用来将多个文件中的内容并列打印,或横排打印。每行有多个域,每个域对应一个文件中相应行的内容。任意两个域之间默认用一个制表符隔开。如果某一行中,某个文件没有内容,则相应域为一个空串。

一般语法:

paste filename1 filename2 filename3


指定分隔符:

paste -d '分割符' filename1 filename2 filename3


横排打印:(先打印完一个文件中的所有行到一行中,再打印另外一个文件中的所有行到下一行)

paste -s -d '分隔符' filename1 filename2 filename3


split

split命令用来将一个文件按字节或者按行分割成多个小文件。

按字节分割成多个文件:

split -b m -a p -d --additional-suffix='额外的后缀字符串' filename output


-b
指定字节数,可以带单位,如
K, M, G, T, P, E, Z, Y
;

-a
指定分割成的子文件的文件名的后缀长度。默认情况下后缀为[a-z]的字符串。

-d
指定后缀名为数字字符串,比如长度为2的数字字符串后缀为00,01,02…

-additional-suffix
指定额外的字符串;

output 为所分割成的子文件的文件名的前缀。

按行数分割成多个文件:

split -l m -a p -d --additional-suffix='额外的字符串' filename output


如:
aplit -l 2 -a 2 seq.txt output


cat

将多个文件连接在一起并打印。一个文件连接到前一个文件的尾部。

一般语法:

cat filename1 filename2 filename3


显示行号:

cat -n filename1 filename2 filename3


join

左连接:

join -a 1 -t '分隔符' -1 m -2 n filename1 filename2


-a
指定文件编号(只能为1或者2)。命令行中第一个文件的编号为1,第二个文件的编号为2.

如果不指定,则表示进行内连接。只会打印出匹配并合并后的行;

如果指定为1,则表示进行左连接

如果指定为2,则表示进行右连接

如果既指定为1,又指定为2,则表示进行全连接。除了会打印出两个文件中匹配并合并后的行外,还会打印出第一个文件和第二个文件中不匹配的行。

-1
是参数,用于指定需要进行匹配的第一个文件中的域的编号;

-2
是参数,用于指定需要进行匹配的第二个文件中的域的编号。

在打印合并后的内容的过程中,会先打印匹配的域,然后分别打印第一个文件和第二个文件中的剩余部分

右连接:

join -a 2 -t ':' -1 1 -2 1 seq.txt seq1.txt


全连接:

join -a 1 -a 2 -t ':' -1 1 -2 1 seq.txt seq1.txt


内连接:

join -1 1 -2 1 seq.txt seq1.txt


【Conference】

http://cuckootan.me/2016/09/17/Linux%20%E5%91%BD%E4%BB%A4%20-%20cut,%20paste,%20split,%20cat,%20join/#more
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: