【Linux】sort、xargs、awk等工具学习笔记

  学习了Linux下的一些工具,做笔记供时常复习,但这些工具不仅限于Linux。
  学习的工具有:sort、uniq、paste、cut、xargs、grep、sed、awk、find。


  • sort
    将文件的每一行作为一个单位,相互比较,比较原则是从首字母向后,依次按ASCII值进行比较,最后将他们升序输出。
选项 含义
不加选项 默认以ASCII升序排序
-r 逆序,即降序排序
-u 去重
-n 以整数来排序
-t -k -t设定分隔符,-k指定列数排序
-f 小写转大写进行比较,即忽略大小写
-b 忽略每一行前面空白部分
-c 检查是否已经有序,如果乱序,则输出第一个乱序的行信息,返回1
-C 检查是否已经有序,如果乱序,不输出,返回1

例:sort -t ‘:’ -k 2 -n file
分隔符为’:’,对第二行按整数排序

  • uniq
    去掉相邻重复行
选项 含义
-c 统计重复行出现的次数
-d 只显示重复行
-u 只显示不重复行

例:找出文件中出现次数最多的前三个
sort file|uniq -c|sort -rn|head -n3
排序|去重统计次数|次数逆序|取前三个

  • paste
    粘贴。将多个文件内容进行合并。按行将不同文件行信息放在一起,缺省情况下,paste连接时,用空格或tab键分割新行中不同文本。
选项 含义
-d 指定域分隔符,paste -d# file1 file2
-s 将每个文件合并成行
- 每有一个-,就有一个列分隔符,默认为空格或tab。可以定制输出格式
  • cut
    从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
    必须指定-b、-c或-f标志之一。
选项 含义
-b 以字节为单位进行分割
-c 以字符为单位进行分割
-d -f -d自定义分隔符,默认为tab,-f指定显示那个区域

echo ‘hello’ | cut -b 1 切出h
echo ‘hello’ | cut -b 1-3 切出hel
echo ‘hello’ | cut -b 1,3 切出hl
echo ‘hello world’ | cut -d’ ’ -f 1 切出hello(1、1,2、2、1-、-2指定不同区域)

  • xargs
    将标准输入数据转换成命令行参数。单行变多行,多行变单行。
选项 含义
-n 指定列数,多行输出。-n3,指定每行三列
-d 自定义一个域分隔符,将特定列打散,指定格式输出

cat file | xargs 多行变单行
echo ‘a#b#c’ | xargs -d#

  • grep
选项 含义
-E 扩展正则
-v 显示未匹配的部分
-r/R 采用递归方法
-q 安静模式,只匹配,不打印
-i 忽略大小写
-n 输出匹配行的行号
-o 只输出匹配到的部分
  • sed
    sed是一种流式编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用。处理时,把当前处理的行存储在临时缓冲区,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直道文件末尾。文件内容并没有改变,除非使用重定向存储输出。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。
    默认为基准正则。
选项 含义
-p /pattern/p 打印匹配pattern的行
-n 只显示匹配成功的
-i 影响原文件
/pattern/s/pattern1/pattern2/g 查找符合pattern的行,将该行所有匹配pattern1的字符串替换为pattern2。带g每一处都替换,不带只替换一次
\1,\2… 子串匹配标记,匹配到的第一个子串标记为\1,通过对标签进行重组,完成数据逆置
-e 允许在同一行执行多条语句
:a 设置标签a
ba 跳转到标签a

模式空间与保持空间
在模式空间(pattern space)中处理数据,保持空间(hold space)只存数据。
模式/保持空间中只有一行数据时,删除末尾换行;有多行时,加上换行。

选项 含义
g 将hold space中的内容拷贝到pattern space中,将原来pattern space里的内容清除
G 将hold space中的内容append(追加)到pattern space
h 将pattern space中的内容拷贝到hold space中,将原来hold space里内容清除
H 将pattern space中的内容append到hold space
d 删除pattern space中所有行,并读入下一行到pattern space中
D 删除multiline pattern中第一行,不读入下一行
x 交换保持空间和模式空间内容
n 读取下一行到pattern space
N 将下一行添加到pattern space

例:1-100求和
seq 100 | sed ‘:a;N;$!ba;s/\n/+g’ bc
产生1-100的序列|数字之间加上加号 计算

  • awk
    awk不仅能以行为单位还能以列为单位处理文件。缺省的行分隔符是换行,列分隔符是连续的空格和tab。
    基本格式:
    awk option ‘script’ file1 file2
    awk option -f scriptfile file1 file2
选项 含义
{print $2} 打印第2个域
$NF 最后一个域
$(NF-1) 倒数第二个域
print,printf 格式化输出,同C
-F 指定分隔符
-F[:;#] 支持多种符号的分隔符

BEGIN&END
做文本处理之前的准备工作,之后的收尾工作。相当于构造和析构。
格式如下:
BEGIN{ } /REG/{ } END{ }
BEGIN{ } condition{ } END{ }

例:统计文本中空行数量
awk ‘BEGIN count=0/*/{count++;}END{printf(“%d\n”,count);}’ file

  • find
选项 含义
-name 按照文件名查找文件
-perm 按照文件权限查找文件
-depth 查找时,首先查找当前目录中的文件,然后再在子目录中查找
-user 按照文件属主查找
-newer file1 !-newer file2 查找更改时间比file1新但比file2旧的文件
-type 查找某一类型的文件

猜你喜欢

转载自blog.csdn.net/ananbei/article/details/80948309