大家觉得写还可以,可以点赞、收藏、关注一下吧!
也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn
第5章实用程序初步
5.1多列内容输出
5.1.1按多列格式输出
- column file:竖着排序
5.1.2按不同行列顺序
- column -x flie:-x横着排序
5.2文件内容查找
5.2.1在多个文件内容中查找
- grep string file1 file2…:从多个文件中查找string
- grep computer *:在当前目录下的所有文件中查找字符串computer
5.2.2在文件中查找多个单词
- grep ‘joy chen’ file:如果不加单引号,会认为chen是一个文件
5.2.3查找单词时忽略字母的大小写
- grep -i string file
5.2.4查找目标内容的文件名
- grep -v string file:输出不包含目标字符串的行
- grep -l string file:只输出文件名
- grep -n string file:在显示匹配行内容的情况下显示其所在原文件行号
5.2.5使用正则表达式
grep '^a' file
:以a开头的字符grep '\^a' file
:转义字符grep 'a$' file
:以a结束的字符- grep ‘^…$’ file:查找长度为4的行,4个”.“表示4个字符
5.3基本数学运算
5.3.1整数运算
- bc
5.3.2浮点运算
- 默认为scale为0,可设置scale=2
- 退出bc执行quit
5.4文件内容排序
5.4.1对文件内容按字典顺序排序
- sort -d file:排序时忽略标点符号等特殊符号
5.4.2对文件内容不区分字母大小写排序
- sort -f file:忽略字母大小写
5.4.3对文件内容反向排序
- sort -r file:反向排序
5.4.4对文件内容按数值大小排序
- sort -n file:数值大小排序
5.4.5对文件内容按某一字段排序
- sort -k 1 file
5.4.6对文件内容限定排序
- sort +1 -3 file:包尾不包头
- sort +1 -2 +3r -4 file:优先第2字段排序,然后第4列逆序排序
5.4.7在不同字段分隔符下使用sort
- sort -t: file:使用:进行分隔
5.4.8对文件排序后重写
- sort -o file file:对文件排序后写回原文件
5.5文件内容比较
5.5.1识别和删除重复行
- uniq -c:相邻重复的话仅打印一次
- uniq -d:打印相邻重复次数大于一
- uniq -u:类似于sort file | uniq,类似集合去重
5.5.2按行比较两个文件
使用comm之前,一定要保证代比较文件是有序的
- comm file1 file2:输出三列:仅file1存在的行,仅file2存在的行,file1和file2都存在的行
- comm -3 file1 file2:不输出第三列
5.5.3查看文件不同之处
- diff file1 file2
5.6文件内容替换
5.6.1替换指定字符
- tr ‘r’ ‘R’ < file:逐字符替换
- tr ‘pe -’ ‘PE,’ < file:替换多个字符,而非字符串!
5.6.2按范围替换
- tr ‘[a-g]’ ‘[A-G]’ < file:将小写的a-g替换成大写的A-G
- tr ‘[a-g]’ ‘[1-7]’ < file
5.6.3删除指定字符
- tr -d ‘o’ < file:删除所有的o
- tr -s ‘o’ < file:连续重复的只保留一个
5.6.4结合管道替换
5.7单行编辑数据
5.7.0查找单词
- sed -n ‘/string/p’ file:仅输出符合的那一行
- sed ‘/string/p’ file:输出符合的行,然后再全部输出
5.7.1修改指定单词
- sed ‘s/oldstring/newstring’ file:只替换所有行内第一个指定单词
- sed ‘s/oldstring/newstring/g’ file:替换所有行内所有指定单词
- sed ‘/targetstring/s/oldstring/newstring/g’ file:在targetstring行内将所有oldstring替换为newstring
5.7.2删除指定行
- sed ‘/targetstring/d’ file:所有包含targetstring的行全部删除
- sed ‘4d’ file:删除第4行
- sed ‘1,3 d’ file:删除1-3行
5.7.3结合正则表达式修改
- sed ‘/^c/s/oldstring/newstring/g’ file:所有以c开头的行中oldstring被newstring替换
- sed ‘s/oldstring/& newstring/g’ file:oldstring被替换为oldstring newsting,正则表达式!
5.8数据操作工具
5.8.1数据操作工具介绍
awk具有极为强大的数据处理能力。他可以选择并输出指定字段、修改字段分隔、操作数据库和选择记录、使用预定义变量和正则表达式、在输出结果中插入空格、进行数学运算。
5.8.2选择行并输出字段
- awk ‘/string/ {print $3}’ file:找到含有string的行,然后输出第3个字段
- $0:表示整行
5.8.3指定字段分隔符
awk -F_ '/ex/ {print $3,$1}' file
:-F指定下划线为字段分隔符,先输出第三个字段,再输出第二个字段- 注意:在
{print $3,$1}
中,用了逗号分隔,使得所有字段均以空格分开
5.8.4awk命令语法
awk 选项 ‘模式{操作}’ 文件名
- 选项:能使awk完成某种待定功能的参数,比如用来指定字段分隔符-F选项
- 模式:待检索的字符串,通常是正则表达式或者关系表达式
- 操作:对检索成功的行执行相应的操作,默认的操作是按指定格式输出检索成功行中的若干字段
- 文件名:待检索文件的名称
5.8.5使用awk操作数据库
- awk ‘{print “Num Name Sex Age Score”;exit}’ file;awk ‘{print}’ file:增强可读性,
5.8.6选择输出数据库的字段
- awk ‘{print $1}’ file
awk '{print $1,$2,$3}' file
- awk ‘{print $0}’ file:输出全部字段
- awk ‘{print}’ file:同$0,输出全部字段
5.8.7使用awk的预定义变量
- NF:当前记录的字段总个数
- NR:当前被检索的行号
- awk ‘{print $(NF-1)}’ file:利用NF输出倒数第二个字段,注意有括号,否则先取值了
5.8.8使用自定义变量、字符串和数字
- awk -v test=‘student:’ ‘{print test $0}’ file:每行先输出test的值”student“,再输出每行的字段
- 如果没有设置自定义变量,然后随便输出,awk会略过这个未定义变量
awk '{print "NUM: " $1,"NAME: "$2}' file
:使用双引号输出若干字符串,由于$1和“NAME”间有逗号,所以输出时会在其中间输出空格- awk ‘{print “78.9-1”,78.9-1}’ file:每一行输出"78.9-1" 77.9
5.8.9使用正则表达式
- awk ‘/[Tt]/ {print}’ file:输出含有T或t的行
awk '/^[a-z]/ {print}' file
:输出以a-z开头的行awk '/[^a-z]/ {print}' file
:[^a-z]
:表示按字母表顺序逐行查找a到z的所有字母,只要某一行包含了a-z以外的任意一个字符,这一行就会被输出- awk ‘/[1-4]/ {print}’ file:逐行查找1到4中任意一个字符,找到便输出
5.8.10使用指定的字段选择记录
- awk ‘$3==“f” {print}’ file:第三个字段的值是否为"f",注意一定要待比较内容两侧加双引号
- awk ‘$4>19 {print}’ file:同 awk ‘{if($4>19) print}’ file
- awk ‘$1~/[Bb]us/ {print}’ file:第一个字段匹配”/[Bb]us/“的才输出
- awk ‘$1!~/[Bb]us/ {print}’ file:第一个字段不匹配”/[Bb]us/“的才输出
awk '$3=="m" && $4>20 {print}' file
:与- awk ‘/[Bb]us/ || $2>=150 {print}’ file:或
- awk ‘!(NF==1) {print}’ file:非
5.8.11使用awk命令文件
-
file中写入:
/Amy/||$4>=20 {print}
-
awk -f file awkfile:输出包含Amy并且第四字段>=20的行
-
FS RS OFS ORS 查找时使用的字段分隔符 查找的换行分隔符 输出的字段分隔符 输出的换行分隔符 -
编写file BEGIN{ FS="-" OFS="~" } { print $1,$2 } 然后awk -f file awkfile
5.8.12awk命令的拓展
5.8.13在awk中进行数学运算
编写file,将商品限定为蔬菜,然后计算输出
$4 == "vegateble" {
name=$1
unitprice=$2
quantity=$3
category=$4
price=unitprice*quantity
print name "\t" price
}
然后awk -f file awkfile
2020年12月16日更
大家觉得写还可以,可以点赞、收藏、关注一下吧!
也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn