Linux高级命令

1.Linux高级命令

该章节的所有操作都在/export/data/shell目录进行,请提前创建该目录.

mkdir -p  /export/data/shell/

重定向

命令含义
ll / > test.txt将/目录下文件的详情保存到test.txt文件中
cat 1.txt >> test.txt将整个文件的内容追加到上一个案例的test.txt文件中

cut命令

cut:文件内容查看命令,cut命令可以从一个文本文件或者文本流中提取文本列。

参数解释
-b按字节选取 忽略多字节字符边界
-c仅显示行中指定范围的字符
-d自定义分隔符,默认为制表符
-f与-d一起使用,指定显示哪个区域。
-n与“-b”选项连用,不分割多字节字符;
–complement补足被选择的字节、字符或字段;
–out-delimiter=<字段分隔符>指定输出内容是的字段分割符;
–help显示指令的帮助信息;
–version显示指令的版本信息。

实例:
如有一个学生报表信息文件stu.txt,包含id、name、age、score.

id name age score
01 tom 18 78
02 jack 20 85
03 bill 16 90
04 mary 24 77
05 anna 21 85
  1. 使用-d和-f显示文件中的指定的列
#显示id列
[root@node1 shell]# cut -d " " -f 1 stu.txt 
id
01
02
03
04
05

#显示name和age列
[root@node1 shell]# cut -d " " -f 2,3 stu.txt
name age
tom 18
jack 20
bill 16
mary 24
anna 21

解释:
-d “ ” :用来指定文件字段之间的分隔符,如果文件的分隔符是制表符则不需要指定该参数
-f 数字 :用来指定哪一列

2. --complement 选项提取指定字段之外的列(打印除了第二列之外的列)

[root@node1 shell]# cut -d " " -f 2 --complement stu.txt
id age score
01 18 78
02 20 85
03 16 90
04 24 77
05 21 85
  1. 指定字段的字符或者字节范围
    cut命令可以将一串字符作为列来显示,字符字段的记法:
    N-:从第N个字节、字符、字段到结尾;
    N-M:从第N个字节、字符、字段到第M个(包括M在内)字节、字符、字段;
    -M:从第1个字节、字符、字段到第M个(包括M在内)字节、字符、字段。
#打印第1个到第3个字符:
[root@node1 shell]# cut -c 1-4 stu.txt
id n
01 t
02 j
03 b
04 m
05 a

#打印前2个字符:
[root@node1 shell]# cut -c -2 stu.txt
id
01
02
03
04
05


#打印从第5个字符开始到结尾
[root@node1 shell]# cut -c 5- stu.txt
ame age score
om 18 78
ack 20 85
ill 16 90
ary 24 77
nna 21 85

wc命令

wc命令:统计行数 单词数 字节数
在默认的情况下,wc将计算指定文件的行数、字数以及字节数。
命令使用格式为:
wc 文件名

参数解释
-l统计行数
-c统计字节数
-w统计单词数
-m统计字符数

实例:
有个文件test_wc.txt,内容如下:

1	11
222 bbb
333 aaa bbb 
444 aaa bbb ccc
555 aaa bbb ccc ddd
666 aaa bbb ccc ddd eee
  1. 统计指定文件行数、字数、字节数
[root@node1 shell]# wc test_wc.txt 
 6 21 85 test_wc.txt
#01.txt文件: 行数为6, 单词数为21, 字节数为85
  1. 查看根目录下有多少个文件
[root@node1 shell]# ls / | wc -w
24

awk命令

简介

awk是一种处理文本文件的命令,是一个强大的文本分析工具,它支持分段,默认每行按空格或TAB分割。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。
awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
语法:
awk [选项参数] 'script' var=value file(s)awk [选项参数] -f scriptfile var=value file(s)
选项参数说明:    
-F 指定输入文件的分隔符
-v var=value or --asign var=value  赋值一个用户定义变量。
-f scripfile or --file scriptfile 从脚本文件中读取awk命令。

运行方式:

在这里插入图片描述

  • 命令行方式
    awk [-F field-separator] ‘commands’ input-file(s)

其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。 在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

  • 脚本方式

将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,通过键入脚本名称来调用。 相当于shell脚本首行的:#!/bin/sh 可以换成:#!/bin/awk。

变量分配:

默认情况下,awk 会将如下变量分配给它在文本行中发现的数据字段:

  • $0 代表整个文本行;
  • $1 代表文本行中的第 1 个数据字段;
  • $2 代表文本行中的第 2 个数据字段;
  • $n 代表文本行中的第 n 个数据字段。

print和printf

awk中同时提供了print和printf两种打印输出的函数。
其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。
printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。

入门案例
默认每行按空格或TAB分割,使用$n来获取段号
有个文件test_awk.txt,内容如下:

aa 111 333
bbb 444 555
ccc 666 777 888
ddd 999 222 999

案例1: 打印test_awk.txt第1段

awk '{print $1}' test_awk.txt

案例2: 打印出test_awk.txt的第1,2,3段

awk '{print $1,$2,$3}' test_awk.txt
案例3:打印出1.txt的第1,2,3段,并且使用#号连接
awk '{print $1"#"$2"#"$3}' test_awk.txt

OFS用来指定输出记录分隔符
案例1::打印1,2,3段,指定#为连接符

awk '{OFS="#"}{print $1,$2,$3}' test_awk.txt

-F 来指定分隔符
准备工作,现在有个文件test_awk2.txt,内容如下:

aaa:111:333
bbb:444:555
ccc:666:777:888
ddd:999:222:999:cccc

案例1: 打印出test_awk2.txt的所有段

awk -F ':' '{print $0}' test_awk2.txt

案例2: 打印出test_awk2.txt的第1,3段

awk -F ':' '{print $1,$3}' test_awk2.txt

内容匹配
这里的内容匹配需要使用正则表达式,常用的正则表达式规则如下:
  1. ^linux 以linux开头的行
  2 . $php 以php结尾的行
  3. . 匹配任意单字符
  4. .+ 匹配任意多个字符
  5. .* 匹配0个或多个字符(可有可无)
  6. [0-9a-z] 匹配中括号内任意一个字符
  7. (linux)+ 出现多次Linux单词
  8. (web){2} web出现两次以上
  9. \ 屏蔽转义
实例:
案例1: 匹配test_awk2.txt中包含cc的内容

awk '/cc/'  test_awk2.txt

案例2: 匹配test_awk2.txt中第1段包含cc的内容

awk -F ':' '$1 ~ /cc/'  test_awk2.txt

案例3: 匹配test_awk2.txt中第1段包含至少连续两个c的内容

awk -F ':' '$1 ~ /cc+/'  test_awk2.txt

案例4: 在test_awk2.txt中如果匹配到abc就打印第1,3段,如果匹配到ccc,就打印第1,3,4段

awk -F ':' '/aaa/ {print $1,$3} /ccc/ {print $1,$3,$4}'  test_awk2.txt

案例4: 在test_awk2.txt中如果匹配到aaa或者ddd,就打印全部内容

awk -F ':' '/aaa|ddd/ {print $0}' test_awk2.txt

段内容判断
在awk命令中,支持很多运算符,使用这些运算符可以进行段内容判断

运算符解释
= += -= *= /= %= ^= **=赋值
?:C条件表达式
||逻辑或
&&逻辑与
~ 和 !~匹配正则表达式和不匹配正则表达式
< <= > >= != ==关系运算符
空格连接
+ -加,减
* / %乘,除与求余
+ - !一元加,减和逻辑非
^ ***求幂
++ –增加或减少,作为前缀或后缀
$字段引用
in数组成员

案例1:在test_awk2.txt中如果第3段等于222就打印所有内容

awk -F ':' '$3==222 {print $0}'  test_awk2.txt 

案例2:在test_awk2.txt中如果第3段等于333就打印第一段

awk -F ':' '$3==333 {print $1}'  test_awk2.txt

案例3:在test_awk2.txt中如果第3段等于300就打印第一段

awk -F ':' '$3==333 {print $1}'  test_awk2.txt

案例4:在test_awk2.txt中如果第1段等于ccc,并且第2段匹配666就打印全部

awk -F ':' '$1=="ccc" && $2==666 {print $0}' test_awk2.txt

段之间的比较
案例1:在test_awk2.txt中如果第3段小于第4段就打印全部

awk -F ':' '$3<$4 {print $0}'  test_awk2.txt

案例2:在test_awk2.txt中如果第2段等于第4段就打印全部

awk -F ':' '$2==$4 {print $0}' test_awk2.txt

NR行号和NF段数
NF 一条记录的字段的数目(多个字段)
NR 已经读出的记录数,就是行号,从1开始(加个行号)

案例1:打印test_awk2.txt全部内容显示行号

awk -F ':' '{print NR " : " $0}' test_awk2.txt 

案例2:打印test_awk2.txt全部内容显示段数

awk -F ':' '{print NF " : " $0}' test_awk2.txt 

案例3:打印test_awk2.txt前2行,并显示行号 (用二种不同的方式实现)

nl命令在linux系统中用来计算文件中行号

nl test_awk2.txt | head -2 
awk -F ':' 'NR<=2 {print NR " " $0}' test_awk2.txt

综合案例
案例1: 对统计awk目录下所有文本文件的大小

ll | awk 'BEGIN{}{total=total+$5} END{print(total)}'

案例2 :打印99乘法表

awk 'BEGIN{ for(i=1;i<=9;i++){ for(j=1;j<=i;j++){ printf("%dx%d=%d%s", i, j, i*j, "\t" ) } printf("\n") } }'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值