Linux 命令之 cut、sort、uniq

一、cut

cut 是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针按 “行” 来进行分析的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段送到标准输出。

常用参数:

  • -b :以字节为单位进行分割
  • -c :以字符为单位进行分割
  • -d :自定义分隔符,默认为制表符
  • -f :与 -d 一起使用,指定显示哪个区域

举个例子:

shiyanlou:~/ $ head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

# 以冒号作为分隔符,取第一段和第六段
shiyanlou:~/ $ head -n 3 /etc/passwd | cut -d : -f 1,6 
root:/root
daemon:/usr/sbin
bin:/bin
# macOS 的例子
~/test  nl a.txt
     1  _analyticsd:*:263:263:Analytics:/var/db/analyticsd:/usr/bin/false
     2  _fpsd:*:265:265:FPS Daemon:/var/db/fpsd:/usr/bin/false
     3  _timed:*:266:266:Time Sync Daemon:/var/db/timed:/usr/bin/false

~/test  cut -f 1,6 -d : a.txt
_analyticsd:/var/db/analyticsd
_fpsd:/var/db/fpsd
_timed:/var/db/timed
# 前五个(包含第五个)
$ cut /etc/passwd -c -5
# 第五个之后的(包含第五个)
$ cut /etc/passwd -c 5-
# 第五个
$ cut /etc/passwd -c 5
# 2到5之间的(包含第二、五个)
$ cut /etc/passwd -c 2-5

二、sort

sort 命令在 Linux 里非常有用,它将文本数据进行排序,并将排序结果标准输出。sort 命令既可以从特定的文件,也可以从 stdin 中获取数据。

默认为字典排序:

$ cat /etc/passwd | sort

反转排序:

$ cat /etc/passwd | sort -r

按特定字段排序:

$ cat /etc/passwd | sort -t':' -k 3

上面的 -t 参数用于指定字段的分隔符,这里是以 : 作为分隔符;-k 字段号用于指定对哪一个字段进行排序。这里 /etc/passwd 文件的第三个字段为数字,默认情况下是以字典序排序的,如果要按照数值排序就要加上 -n 参数:

$ cat /etc/passwd | sort -t':' -k 3 -n

三、uniq

uniq 可以用来按行去重

3.1 简单例子:

~/test  cat a.txt
vim
vim
vim
vimtutor
virtualenv
wc
wc
wget
wget
wget
which
~/test  cat a.txt | uniq
vim
vimtutor
virtualenv
wc
wget
which
~/test  uniq a.txt   # 同上
vim
vimtutor
virtualenv
wc
wget
which

3.2 -u 显示无重复的行:

~/test  cat a.txt | uniq -u
vimtutor
virtualenv
which

3.3 -d 显示有重复的行:

~/test  uniq -d a.txt
vim
wc
wget

3.4 -c 显示每行重复的次数:

~/test  cat a.txt | uniq -c
   3 vim
   1 vimtutor
   1 virtualenv
   2 wc
   3 wget
   1 which

3.5 综合命令:

history | cut -c 8- | cut -f 1 -d ' ' | sort | uniq -c | sort -n | wc -l

你可能感兴趣的:(Linux 命令之 cut、sort、uniq)