sort是在Linux里非常常用的一个命令,对指定文件进行排序、去除重复的行

sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。

sort语法:

[root@www ~]# sort [-fbMnrtuk] [file or stdin]
选项与参数:
-f :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b :忽略每行最前面的空格符部分;
-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n :按照数值的大小排序;
-r :反向排序;
-u :就是 uniq ,重复的数据中,仅出现一行代表;
-t :分隔符,默认是用 [tab] 键来分隔;
-k :以那个区间 (field) 来进行排序的意思 -c 检查文件是否已经按照顺序排序。

1.对/etc/passwd 的账号进行排序:

[root@www ~]# cat /etc/passwd | sort
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologi

2.sort 是默认以第一个数据来排序,而且默认是以字符串形式来排序,所以由字母 a 开始升序排序。/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何

[root@www ~]# cat /etc/passwd | sort -t ':' -k 3
root:x:0:0:root:/root:/bin/bash
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin

3.默认是以字符串来排序的,如果想要使用数字排序:

cat /etc/passwd | sort -t ':' -k 3n
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh

4.默认是升序排序,如果要倒序排序,如下

cat /etc/passwd | sort -t ':' -k 3nr
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
ntp:x:106:113::/home/ntp:/bin/false
messagebus:x:105:109::/var/run/dbus:/bin/false
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin

5.如果要对/etc/passwd,先以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序

cat /etc/passwd |  sort -t':' -k 6.2,6.4 -k 1r
sync:x:4:65534:sync:/bin:/bin/sync
proxy:x:13:13:proxy:/bin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh

6.查看/etc/passwd有多少个shell:对/etc/passwd的第七个域进行排序,然后去重:

cat /etc/passwd |  sort -t':' -k 7 -u
root:x:0:0:root:/root:/bin/bash
syslog:x:101:102::/home/syslog:/bin/false
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin

实例:

统计nginx访问日志中$request访问的响应时间,其中$request_time为响应时间.并按响应时间进行排序,日志格式如下:

[--01T03::+:] 223.104.65.46 - - "POST /service/investments/gettickcount HTTP/1.1"   0.003 0.003 10.100.3.41:
"-" "eTonDa/1215.1050 CFNetwork/811.5.4 Darwin/16.6.0" "-" "https://api.xxxooo.com/service/investments/gettickcount" "-" "-"

执行命令如下(使用grep过滤出含有该字段的行,通过awk取出需要的两个字段,并使用sort进行排序,-t参数指定使用空格进行分割,-k用来指定以哪个字段进行排序,这里指定2,表示以相应时间进行排序,-r为反向排序,head表示默认显示前十行):

[root@localhost]# cat  /opt/logs/nginx/api.access_access.log |grep --color '/api/attendence/v1/' | awk '{print $6,$9}' |sort -t " " -rk  |head
/api/attendence/v1/attendences?channel=APP 0.448
/api/attendence/v1/attendences?channel=APP 0.442
/api/attendence/v1/attendences?channel=APP 0.435
/api/attendence/v1/attendences?channel=APP 0.433
/api/attendence/v1/attendences?channel=APP 0.433
/api/attendence/v1/attendences?channel=APP 0.429
/api/attendence/v1/attendences?channel=APP 0.421
/api/attendence/v1/attendences?channel=APP 0.420
/api/attendence/v1/attendences?channel=APP 0.415
/api/attendence/v1/attendences?channel=APP 0.415

uniq

uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。

uniq语法:

[root@www ~]# uniq [-i c u]
选项与参数:
  -i  
:忽略大小写字符的不同;
  -c 
:进行计数
  -u  :只显示唯一的行

1.testfile的内容如下

cat testfile
hello
world
friend
hello
world
hello

2.排序文件,默认是去重

#cat testfile  | sort |uniq
friend
hello
world

3.排序之后删除了重复行,同时在行首位置输出该行重复的次数

#sort testfile | uniq -c
1 friend
3 hello
2 world

4.仅显示存在重复的行,并在行首显示该行重复的次数

#sort testfile | uniq -dc
3 hello
2 world

5.仅显示不重复的行

sort testfile | uniq -u
friend

cut

cut命令可以从一个文本文件或者文本流中提取文本列。

常用参数:
 -c 根据字符,用法:cut -cnum1-num2 filename 截取num1~num2之间的字符,字符从1开始记。

-f 根据域,默认为tab分隔

-d 定义域分隔符

cut语法

[root@www ~]# cut -d'分隔字符' -f fields ==用于有特定分隔字符 [root@www ~]# cut -c 字符区间 ==用于排列整齐的信息 选项与参数: -d :后面接分隔字符。与 -f 一起使用; -f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思; -c :以字符 (characters) 的单位取出固定字符区间; 

PATH 变量如

[root@www ~]# echo $PATH
/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games
# 1 | 2 | 3 | 4 | 5 | 6 | 7

1.将 PATH 变量取出,我要找出第五个路径。

#echo $PATH | cut -d ':' -f 5
/usr/local/bin

2.将 PATH 变量取出,我要找出第三和第五个路径

#echo $PATH | cut -d ':' -f 3,5
/sbin:/usr/local/bin

3.将 PATH 变量取出,我要找出第三到最后一个路径。

echo $PATH | cut -d ':' -f 3-
/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games

4.将 PATH 变量取出,我要找出第一到第三个路径。

#echo $PATH | cut -d ':' -f 1-3
/bin:/usr/bin:/sbin:

5.将 PATH 变量取出,我要找出第一到第三,还有第五个路径。

echo $PATH | cut -d ':' -f 1-3,5
/bin:/usr/bin:/sbin:/usr/local/bin

6.实用例子:只显示/etc/passwd的用户和shell

#cat /etc/passwd | cut -d ':' -f 1,7 root:/bin/bash
daemon:/bin/sh
bin:/bin/sh

 wc

统计文件里面有多少单词,多少行,多少字符。

wc语法

[root@www ~]# wc [-lwm]
选项与参数:
-l 
:仅列出行;
-w 
:仅列出多少字(英文单字);
-m 
:多少字符;

默认使用wc统计/etc/passwd

#wc /etc/passwd
40 45 1719 /etc/passwd
40是行数,45是单词数,1719是字节数

wc的命令比较简单使用,每个参数使用如下:

1.#wc -l /etc/passwd #统计行数,在对记录数时,很常用 40 /etc/passwd #表示系统有40个账户 
2.#wc -w /etc/passwd #统计单词出现次数 45 /etc/passwd 3.#wc -m /etc/passwd #统计文件的字节数 1719
 tr命令:
tr用来从标准输入中通过替换或删除操作进行字符转换。
tr主要用于删除文件中控制字符或进行字符转换
常用选项的tr命令格式为:
tr -c -d -s ["string1_to_translate_from"]["string2_to_translate_to"] < input-file
这里:
-c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
 input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。
2、字符范围
指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。
[a-z] a-z内的字符组成的字符串。
[A-Z] A-Z内的字符组成的字符串。
[0-9] 数字串。
\octal 一个三位的八进制数,对应有效的ASCII字符。
[O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。
实例:
1、将文件file中出现的"abc"替换为"xyz"

    # cat file | tr "abc" "xyz" > new_file
【注意】这里,凡是在file中出现的"a"字母,都替换成"x"字母,"b"字母替换为"y"字母,"c"字母替换为"z"字母。而不是将字符串"abc"替 换为字符串"xyz"。
2、使用tr命令“统一”字母大小写
(小写 --> 大写)
# cat file | tr [a-z] [A-Z] > new_file
(大写 --> 小写)
# cat file | tr [A-Z] [a-z] > new_file
3、把文件中的数字0-9替换为a-j
# cat file | tr [0-9] [a-j] > new_file
4、删除文件file中出现的"Snail"字符
# cat file | tr -d "Snail" > new_file
【注意】这里,凡是在file文件中出现的'S','n','a','i','l'字符都会被删除!而不是紧紧删除出现的"Snail”字符串。
5、删除文件file中出现的换行'\n'、制表'\t'字符 # cat file | tr -d "\n\t" > new_file
不可见字符都得用转义字符来表示的,这个都是统一的。 6、删除“连续着的”重复字母,只保留第一个 # cat file | tr -s [a-zA-Z] > new_file
7、删除空行
# cat file | tr -s "\n" > new_file
8、删除Windows文件“造成”的'^M'字符
# cat file | tr -d "\r" > new_file
或者
# cat file | tr -s "\r" "\n" > new_file 【注意】这里-s后面是两个参数"\r"和"\n",用后者替换前者
9、用空格符\040替换制表符\011
# cat file | tr -s "\011" "\040" >new_file
10、把路径变量中的冒号":",替换成换行符"\n"
# echo $PATH | tr -s ":" "\n"

统计nginx日志响应时间,并按响应时间进行排序,列出每个url的访问次数,需要用那个字段排序需要将改字段放在前面..awk '{print $9 ,$6}'

[root@localhost tmp]# cat  /opt/logs/nginx/api_access.log |grep --color '/api/attendence/v1/' | awk '{print $9 ,$6}' |sort -r |uniq -dc
0.433 /api/attendence/v1/attendences?channel=APP
0.415 /api/attendence/v1/attendences?channel=APP
0.367 /api/attendence/v1/attendences?channel=APP
0.341 /api/attendence/v1/attendences?channel=APP
0.338 /api/attendence/v1/attendences?channel=APP
0.308 /api/attendence/v1/attendences?channel=APP
0.305 /api/attendence/v1/attendences?channel=APP
0.295 /api/attendence/v1/attendences?channel=APP
0.284 /api/attendence/v1/attendences?channel=APP
0.282 /api/attendence/v1/attendences?channel=APP
0.279 /api/attendence/v1/attendences?channel=APP
0.278 /api/attendence/v1/attendences?channel=APP
0.277 /api/attendence/v1/attendences?channel=APP
0.274 /api/attendence/v1/attendences?channel=APP
0.273 /api/attendence/v1/attendences?channel=APP
0.272 /api/attendence/v1/attendences?channel=APP
0.271 /api/attendence/v1/attendences?channel=APP
												

linux sort,uniq,cut,wc,tr命令详解的更多相关文章

  1. 【转帖】linux sort,uniq,cut,wc,tr,xargs命令详解

    linux sort,uniq,cut,wc,tr,xargs命令详解 http://embeddedlinux.org.cn/emb-linux/entry-level/201607/21-5550 ...

  2. linux sort,uniq,cut,wc命令详解

    linux sort,uniq,cut,wc命令详解 sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些 ...

  3. (转)linux sort,uniq,cut,wc命令详解

    linux sort,uniq,cut,wc命令详解 sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些 ...

  4. [转]linux sort,uniq,cut,wc命令详解

    sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...

  5. linux sort,uniq,cut,wc命令详解 (转)

    sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...

  6. (F) linux sort,uniq,cut,wc命令详解

    F:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858385.html sort sort 命令对 File 参数指定的文件中的行排序,并 ...

  7. 文件上传下载,命令之wget / curl / which / sort / uniq / cut / wc /tr /sed

    目录 命令 1.文件的上传下载 2.从外网下载文件wget 3.curl文件下载 4.查找命令which 5.字符处理命令-排序sort 6.字符处理-去重uniq 7.字符处理-截取cut 8.字符 ...

  8. linux sort,uniq,cut,wc.

    文章转自 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858385.html sort sort 命令对 File 参数指定的文件中的行排 ...

  9. Linux shell tr 命令详解

    该随笔摘自 https://www.jb51.net/article/103892.htm Linux shell tr 命令详解 1. 用途 tr,translate的简写,主要用于压缩重复字符,删 ...

随机推荐

  1. eclipse-搭建maven的war项目集合spring注解方式

    工具:eclipse 4.4.2 版本号:20150219-0600 jdk:1.7 1.下图创建maven工程,然后next 下图选择工程保存位置(这里选择默认),next 下图选择webapp项目 ...

  2. 【转】Timer还是Handler

    在我们Android开发过程中,经常需要执行一些短周期的定时任务,这时候有两个选择Timer或者Handler.然而个人认为:Handler在多个方面比Timer更为优秀,更推荐使用. 一.易用性 1 ...

  3. 【BZOJ-2006】超级钢琴 ST表 + 堆 (一类经典问题)

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2473  Solved: 1211[Submit][Statu ...

  4. java web项目导入到eclipse中变成了java项目的一种情况的解决办法

    前提,我把代码上传到github上之后,在另外一台电脑上拉下之后,先报出现的是jre不对,然后换成了当前的jre,然后红色的感叹号消失了但是之前项目上那个小地球不见了,也就是说变成了java项目. - ...

  5. 【bzoj2809】 Apio2012—dispatching

    http://www.lydsy.com/JudgeOnline/problem.php?id=2809 (题目链接) 题意 给出一棵树,每个节点有两个权值${c}$,${L}$,分别代表花费和领导力 ...

  6. FT232RL变砖之后

    FT232RL是个是神奇的片子,说万能可能有些夸张,但是...总之就是FTDIChip这个神奇的公司基于类似的技术,做了很多好用的产品,包括转IIC啦,转SPI啦,密码狗啦之类的.是个很有用的工具就对 ...

  7. 页面记载给绑定query的grid加filter

    功能名称:listDataAction 切入类型:before 事件名称:com.kingdee.bos.webframework.dynamic.event.view.WebListDataEven ...

  8. Spring表单参数绑定中对“is”开头的boolean类型字段的的处理

    之前在新浪微博上面发了一个微薄: 弱弱的发现在定义boolean类型的时候最好不要使用“is”开头,可以避免一些问题哦 然后有一些朋友朋友问我为什么,当时比较忙,现在写篇文章举一个例子,回复一下这个问 ...

  9. 基本概率分布Basic Concept of Probability Distributions 8: Normal Distribution

    PDF version PDF & CDF The probability density function is $$f(x; \mu, \sigma) = {1\over\sqrt{2\p ...

  10. JavaScript 写几个简单的知识点

    首先,还是用比较官方的文字描述来解释下JavaScript: JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为 ...