语法: sort [opts] [file-list]
选项 | 功能 |
---|---|
- b | 忽略主要空白 |
-d | 按照通常的字母顺序排序:忽略除字母、数字和空格以外的所有字符 |
-f | 大小写字母等价 |
-m | “merge”,合并已排序的文件 |
-n | 用字符串数值比较, |
-r | “reverse”, 逆序输出 |
-t | 指定一个分隔符,如-t:,表示用:分隔 |
-k | 指定一个字段为排序的键,如-k1,表示用第一个字段 |
+n1 [-n2] | 指定字段作为排序键,以+n1开始,以-n2结束(未指定-n2,则指定行尾);字段编号以0开始 |
-o FILE | 将排序后的输出发送到FILE,而不是标准输出 |
如果file-list中没有指定文件,
那么sort将从标准(一般是keyboards)输入中接受输入。
上才艺: sort -t: -nk5 databook
上才艺:sort -t: -n +4 databook
注意这里的 +4 是指下标为4,是第五个字段
在Linux中,可以使用剪切和粘贴命令处理以表的形式存储数据的文件
用cut 就是 , 对表格垂直切片。
语法:
cut -blist [-n] [file-list]
cut -clist [file-list]
cut -flist [-dchar] [-s] [file-list]
选项 | 功能 |
---|---|
-b list | 按字节bytes来切分 |
-c list | 按字符character来切分 |
-d char | 使用字符char代替 |
-f list | 剪切列表中指定的字段 |
-n | 不要拆分字符(与-b选项一起使用) |
-s | 不输出没有分隔符的行 |
上才艺: cut -d: -f1,5 -s databook
paste:
补充了剪切命令;
它水平连接文件(cat命令垂直连接文件)。
因此,可使用此命令将表粘贴到列中。
语法: paste [options] file-list
-d list | 使用列表字符作为行分隔符; |
---|
又一个才艺:用两个临时表table1、table2,进行paste
这样,就节省了时间空间,无需用临时表。
用来:用于将一个命令的stdout,连接到另一个命令的stdin
stdout:标准输出——一般为screen
stdin:标准输入——一般为keyboard
上才艺:显示当前目录下的所有目录文件:ls –l | grep ‘^d’
又如:课堂点名——查谁没登陆:who | wc –l
看来只有4个孩子(来上课)登录了。
目的:在文件中搜索给定的模式、字符串或表达式
语法:grep [options] pattern [file-list]
- i | Ignore the case of letters |
---|---|
- n | 打印行号 |
- v | 打印nonmatching行 |
- c | 只打印匹配的行数 |
- w | 以字符串形式搜索给定的模式 |
- l | 只打印匹配行的文件名 |
上才艺:
grep命令
可以在多个文件中搜索具有正则表达式和shell元字符
的字符串
上才艺:grep –n include *.c
直接上才艺:
$ grep "\
\<
用于表示单词的开头
单引号(或双引号)用于确保shell不会将模式中的任何字母解释为shell元字符
所以,命令显示包含以字符串“Ke”开头的单词的行。
grep 'net\>' students
同理,\>
表示单词的结尾
所以,该命令display包含以“net”结尾的单词的行。
awk太强大了,我只能力所能及的说一些简单用法。
这里附一个Linux awk 命令 | 菜鸟教程
以及搜索到的某大佬:Linux三剑客之awk命令
awk,严格上说不是一个命令,而是 一种用于操作数据和生成报表的编程语言
是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫 AWK
是因为其取了三位创始人
Alfred Aho,
Peter Weinberger,
和 Brian Kernighan
的 Family Name 的首字符。
语法:
awk '{[pattern] action}' {filenames}
awk 'pattern {action}' filename
awk '{action}' filename
awk 'pattern' filename
awk -F #-F相当于内置变量FS, 指定分割字符
awk的程序指令由模式和操作组成,
即Pattern { Action }的形式
省略Action,则默认执行 print $0
模式(Pattern)用于筛选记录,操作(Action)用于处理字段,操作可以有多个,大括号内用;号隔开。
上才艺了:
awk '$2~"^D"{print $1,$2}' /tmp/student_records
默认空格为分隔符,取第二个字段,以D开头的记录。
打印第一、第二个字段
awk '$4>3{print $1, $2}' student_records
注意到这里用了关系运算符>
, 指第四个字段数值大于三的行。
awk除了可以进行关系运算,还有数值运算和逻辑运算。
去重复:
awk '!a[$0]++' duplicate.txt
其主要的原理,是利用AWK的数组a,
用每一行($0)作为索引(类似数组下标,像python字典类型的键),
若,行不存在 , a[$0], 返回 0。
又因为!
,所以!a[$0
]返回True;
于是就默认Action {print $0}
a[$0] ++
先返回,后++。
辣摸,第二次读到相同的行(索引),a[$0]++
返回正整数(True)。
聪明的,你看懂了么~
sed命令可不是小角色,也很牛的。
这儿附一个传送门——Linux sed命令完全攻略(超级详细)
语法:sed '[address]command' filename(s)
英文版的选项与功能:
算了,放过自己。
中文版如下:
d | 删除行 |
---|---|
s | (string)一个字符串代替另一个字符串 |
g | (global)全局替换(上面的s只替换一处) |
p | (print)打印行(输出修改过的行) |
a | (append)向当前行追加一行或多行文本 |
i | (insert)将文本插入当前行之上。 |
! | 将命令应用到除所选行之外的所有行。 |
-n | 默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print (p)命令来完成输出。 |
上才艺上才艺:
sed '2,3d' data
删除 data 文件内容中的第 2,3 行
sed '/1/,/3/d' data
删除第 1~3 行的文本数据
sed '/^$/d' student_record
删除空白行
sed 's/\
将CS,替换为EECS
sed –n '/\
只显示修改过的行