cut paste tr sort wc uniq join

awk sed 因为比较复杂,这里不做单独介绍


--------------------------------------------------------------------

1,cut 字符分割,处理文件,仅作展示,不会保存结果


 -d, --delimiter=分界符使用指定分界符代替制表符作为区域分界

 -f, --fields=LIST       select only these fields;  also print any line

cut -d (分隔符(若分隔符为空格 ‘ ’)) -f (分割后的编号)

exmaple1::显示用户名

# cut -d : /etc/passwd -f 1


 -c, --characters=列表只选中指定的这些字符

cut -c (字符范围)

example2:去用户名的2和4字符

#cut -c 2,4 /etc/passwd

其他,取值范围

   N从第1 个开始数的第N 个字节、字符或域

   N-从第N 个开始到所在行结束的所有字符、字节或域

   N-M从第N 个开始到第M 个之间(包括第M 个)的所有字符、字节或域

   -M从第1 个开始到第M 个之间(包括第M 个)的所有字符、字节或域


---------------------------------------------------------------------

2,paste 多行合并

example3:

# more name age

::::::::::::::

name

::::::::::::::

tom

jack

lili

::::::::::::::

age

::::::::::::::

18

19

20


example4:

# paste name age

tom18

jack19

lili20

 -d, --delimiters=列表改用指定列表里的字符替代制表分隔符

example5:

[root@centos65-22 ~]# paste  -d : name age

tom:18

jack:19

lili:20


 -s, --serial不使用平行的行目输出模式,而是每个文件占用一行

[root@centos65-22 ~]# paste -s  name

tomjacklili


----------------------------------------------------------------------------------

3,tr 替换、缩减和/或删除字符

examp6:

[root@centos65-22 ~]# cat mytest |tr 'a' 'A' && cat mytest

AAA bbb:ccc

ddd eee:fff

aaa bbb:ccc

ddd eee:fff


tr 'a' 'A' 将小写a转换为大写A

tr '()' '[]' 将小括号转为中括号

tr '[a-z]' '[A-Z]' 小写转大写

tr '\n' ' ' 换行转空格

tr -s 'aaa' 'a' 将多个字符a转换为一个字符a

tr -d 'aaa' 删除aaa

tr -d '[0-9]' 删除所有数字


examp7:

[root@centos65-22 ~]# cat age |tr '[0-9]' '[5-9 0-4]' && cat age

62

63

75

18

19

20



备注:

 \NNN八进制值为NNN 的字符(1 至3 个数位)

 \\反斜杠

 \a终端鸣响

 \b退格

 \f换页

 \n换行

 \r回车

 \t水平制表符

 \v垂直制表符

 字符1-字符2从字符1 到字符2 的升序递增过程中经历的所有字符

 [字符*]在SET2 中适用,指定字符会被连续复制直到吻合设置1 的长度

 [字符*次数]对字符执行指定次数的复制,若次数以 0 开头则被视为八进制数

 [:alnum:]所有的字母和数字

 [:alpha:]所有的字母

 [:blank:]所有呈水平排列的空白字符

 [:cntrl:]所有的控制字符

 [:digit:]所有的数字

 [:graph:]所有的可打印字符,不包括空格

 [:lower:]所有的小写字母

 [:print:]所有的可打印字符,包括空格

 [:punct:]所有的标点字符

 [:space:]所有呈水平或垂直排列的空白字符

 [:upper:]所有的大写字母

 [:xdigit:]所有的十六进制数

 [=字符=]所有和指定字符相等的字符


--------------------------------------------------------------------------------

4,sort 排序

 -b, --ignore-leading-blanks忽略前导的空白区域

 -d, --dictionary-order只考虑空白区域和字母字符

 -f, --ignore-case忽略字母大小写

 -g, --general-numeric-sort按照常规数值排序

 -i, --ignore-nonprinting只排序可打印字符

 -M, --month-sort比较 (未知) < "一月" < ... < "十二月"

在LC_ALL=C 时为(unknown) < `JAN' < ... < `DEC'

 -h, --human-numeric-sort    使用易读性数字(例如: 2K 1G)

 -n, --numeric-sort根据字符串数值比较

 -R, --random-sort根据随机hash 排序

     --random-source=文件从指定文件中获得随机字节

 -r, --reverse逆序输出排序结果

     --sort=WORD按照WORD 指定的格式排序:

一般数字-g,高可读性-h,月份-M,数字-n,

随机-R,版本-V

 -V, --version-sort在文本内进行自然版本排序


其他选项:


     --batch-size=NMERGE一次最多合并NMERGE 个输入;如果输入更多

则使用临时文件

 -c, --check, --check=diagnose-first检查输入是否已排序,若已有序则不进行操作

 -C, --check=quiet, --check=silent类似-c,但不报告第一个无序行

     --compress-program=程序使用指定程序压缩临时文件;使用该程序

的-d 参数解压缩文件

     --files0-from=文件从指定文件读取以NUL 终止的名称,如果该文件被

指定为"-"则从标准输入读文件名

 -k, --key=位置1[,位置2]在位置1 开始一个key,在位置2 终止(默认为行尾)

 -m, --merge合并已排序的文件,不再进行排序

 -o, --output=文件将结果写入到文件而非标准输出

 -s, --stable禁用last-resort 比较以稳定比较算法

 -S, --buffer-size=大小指定主内存缓存大小

 -t, --field-separator=分隔符使用指定的分隔符代替非空格到空格的转换

 -T, --temporary-directory=目录使用指定目录而非$TMPDIR 或/tmp 作为

临时目录,可用多个选项指定多个目录

 -u, --unique配合-c,严格校验排序;不配合-c,则只输出一次排序结果

 -z, --zero-terminated以0 字节而非新行作为行尾标志



example8:按年龄进行排序

[root@centos65-22 ~]# paste -d : name age |sort -t ':' -k2

tom:18

jack:19

lili:20


example9:按年龄进行排序(倒序)

[root@centos65-22 ~]# paste -d : name age |sort -t ':' -k2 -r

lili:20

jack:19

tom:18


--------------------------------------------------------------------------------

5,wc 统计

 -c, --bytes输出字节数统计

 -m, --chars输出字符数统计

 -l, --lines输出行数统计

     --files0-from=文件从指定文件读取以NUL 终止的名称,如果该文件被

指定为"-"则从标准输入读文件名

 -L, --max-line-length显示最长行的长度

 -w, --words显示单词计数


example10:

[root@centos65-22 ~]# cat /etc/passwd |wc

    29      45    1330

   行数   单词数 字节数


--------------------------------------------------------------------

6,uniq 去重复行


 -c, --count在每行前加上表示相应行目出现次数的前缀编号

 -d, --repeated只输出重复的行

 -D, --all-repeated[=delimit-method显示所有重复的行

 -f, --skip-fields=N比较时跳过前N 列

 -i, --ignore-case在比较的时候不区分大小写

 -s, --skip-chars=N比较时跳过前N 个字符

 -u, --unique只显示唯一的行

 -z, --zero-terminated使用'\0'作为行结束符,而不是新换行

 -w, --check-chars=N对每行第N 个字符以后的内容不作对照


example11:



--------------------------------------------------------------------------

7,join 连接文本中内容相同的行

左连接(left join, 左外连接, left outer join)     格式:join -a1 <FILE1> <FILE2>

右连接(right join, 右外连接,right outer join)  格式:join -a2 <FILE1> <FILE2>

全连接(full join, 全外连接, full outer join)      格式:join -a1 -a2 <FILE1> <FILE2>

指定分隔符:

-t <CHAR>


example12:

[root@centos65-22 ~]# more name age

::::::::::::::

name

::::::::::::::

1 tom

2 jack

3 lili

::::::::::::::

age

::::::::::::::

1 18

2 19

3 20


[root@centos65-22 ~]# join name1 age1

1 tom 18

2 jack 19

3 lili 20