linux 命令 — sort、uniq

时间:2023-03-08 16:30:52

sort uniq

sort:对行或者文本文件排序
uniq:去除重复的行

常用

sort -n file.txt
按数字进行排序

sort -r file.txt
按逆序进行排序

sort -M file.txt
按月份进行排序

sort -C file
如果返回0表示已经排序

sort -nC file
返回0表示已经按照数字排序

sort -m sorted_file1 sorted_file2
合并两个已经排过序的文件,而且不需要对合并后的文件再次排序

按键或者列进行排序

sort -nrk 1 data.txt
-n,表示按照数字排序,-r表示使用逆序,-k n表示选择第n列进行排序

sort -nk 1, 2 file
按照第1-2两个字符进行排序,-k n1, n2 可以指定排序的键值

sort -z file
排序之后使用'\0'作为分隔符

uniq

uniq只能用于排过序的输入
sort unsort.txt | uniq
sort -u unsort.txt
uniq sorted.txt

sort unsorted.txt | uniq -c
统计各行在文件中出现的次数

sort unsorted.txt | uniq -d
找出文件中重复的行

sort data.txt | uniq -s 2 -w 3
将排序后文件中第3-6个字符作为键进行唯一值过滤,-s n 表示跳过前n个字符,-w m 表示选择的字符个数

uniq -z sorted.txt
输出内容使用"\0"作为分隔符

使用uniq生成字符串样式

输入:ahebhaaa
输出:4a1b1e2h

echo "ahebhaaa" | sed 's/[^.]/&\n/g' | sed '/^$/d' | sort | uniq -c | tr -d ' \n'
sed 's/[^.]/&\n/g': 将每一个字符后面追加一个换行符(将所有的字符使用该字符加"\n"替换),"&"表示前面正则表达式中匹配到的内容,这里也就是一个字符
sed '/^$/d': 搜索所有的空行并删除
sort: 按照字母表顺序排序
uniq -c: 统计每个字符出现的次数
tr -d ' \n': 删除空格和换行