linux简单命令4:管道命令下

  1. split

字节 将 大文件 切分成 若干小文件

命令英文含义
split -b 10k 文件byte将大文件切分成若干10KB的小文件
#准备文件,通过rz命令上传一份大文档5.1M的demo.txt
[root@hadoop01 20200503]# ll
总用量 0
[root@hadoop01 20200503]# rz
rz waiting to receive.
 zmodem trl+C ȡ

  100%    5190 KB 5190 KB/s 00:00:01       0 Errors

[root@hadoop01 20200503]# ll -h
总用量 5.1M
-rw-r--r--. 1 root root 5.1M 11月 10 2018 demo.txt
[root@hadoop01 20200503]# 

#切割,将demo切割成1M大小的若干份小文件

[root@hadoop01 20200503]# split -b 1M demo.txt 
[root@hadoop01 20200503]# ll
总用量 10384
-rw-r--r--. 1 root root 5314652 11月 10 2018 demo.txt
-rw-r--r--. 1 root root 1048576 4月  17 18:44 xaa
-rw-r--r--. 1 root root 1048576 4月  17 18:44 xab
-rw-r--r--. 1 root root 1048576 4月  17 18:44 xac
-rw-r--r--. 1 root root 1048576 4月  17 18:44 xad
-rw-r--r--. 1 root root 1048576 4月  17 18:44 xae
-rw-r--r--. 1 root root   71772 4月  17 18:44 xaf
[root@hadoop01 20200503]# 

行数 将 大文件 切分成 若干小文件

命令英文含义
split -l 1000 文件lines将大文件切分成若干1000行 的小文件
#新建01目录,将demo移到该目录下
[root@hadoop01 20200503]# mv demo.txt  01/
[root@hadoop01 20200503]# ll
总用量 5196
drwxr-xr-x. 2 root root    4096 4月  17 18:47 01
-rw-r--r--. 1 root root 1048576 4月  17 18:44 xaa
-rw-r--r--. 1 root root 1048576 4月  17 18:44 xab
-rw-r--r--. 1 root root 1048576 4月  17 18:44 xac
-rw-r--r--. 1 root root 1048576 4月  17 18:44 xad
-rw-r--r--. 1 root root 1048576 4月  17 18:44 xae
-rw-r--r--. 1 root root   71772 4月  17 18:44 xaf
[root@hadoop01 20200503]# cd 01
[root@hadoop01 01]# ll
总用量 5192
-rw-r--r--. 1 root root 5314652 11月 10 2018 demo.txt
[root@hadoop01 01]# 

#查看demo的行数,共有53712行
[root@hadoop01 01]# wc -l demo.txt 
53712 demo.txt

#按照每个10000行切割
[root@hadoop01 01]# split  -l 10000 demo.txt 
[root@hadoop01 01]# ll
总用量 10396
-rw-r--r--. 1 root root 5314652 11月 10 2018 demo.txt
-rw-r--r--. 1 root root 1337588 4月  17 18:49 xaa
-rw-r--r--. 1 root root 1285109 4月  17 18:49 xab
-rw-r--r--. 1 root root 1003928 4月  17 18:49 xac
-rw-r--r--. 1 root root  786525 4月  17 18:49 xad
-rw-r--r--. 1 root root  695600 4月  17 18:49 xae
-rw-r--r--. 1 root root  205902 4月  17 18:49 xaf

#查看切割后小文件的行数
[root@hadoop01 01]# wc -l x*
  10000 xaa
  10000 xab
  10000 xac
  10000 xad
  10000 xae
   3712 xaf
  53712 总用量

8 .awk

通过 awk 实现 模糊查询, 按需提取字段, 还可以进行 判断 和 简单的运算等.

搜索含有某字符串的内容

命令含义
awk ‘/搜索字符/’ test1.txt模糊查询
# 准备文档
[root@node01 export]# cat test1.txt 
zhangsan 68 99 26
lisi 98 66 96
wangwu 38 33 86
zhaoliu 78 44 36
maq 88 22 66
zhouba 98 44 46

# 搜索含有 wang 和 zhao 的内容
[root@hadoop01 02]# cat test1.txt | awk '/wang|zhao/'
wangwu 38 33 86
zhaoliu 78 44 36

指定分割符, 根据下标显示内容

命令含义
awk -F ‘,’ ‘{print $1, $2, $3}’ 文件操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容

选项

选项英文含义
-F ','field-separator使用 指定字符 分割
$ + 数字获取第几段内容
$0获取 当前行 内容
NFfield表示当前行共有多少个字段
$NF代表 最后一个字段
$(NF-1)代表 倒数第二个字段
NR代表 处理的是第几行
#按照' '空格切割,打印第一和第三,注意引号问题
[root@hadoop01 02]# cat test1.txt | awk -F ' '{print$1,$3}
[root@hadoop01 02]# cat test1.txt | awk -F ' ' '{print$1,$3}'
zhangsan 99
lisi 66
wangwu 33
zhaoliu 44
maq 22
zhouba 44

指定分割符, 根据下标显示内容

命令含义
awk -F ’ ’ ,’{OFS="==="}{print $1, $2, $3}’ 1.txt操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容

选项

选项英文含义
OFS="字符"output field separator向外输出时的段分割字符串
转义序列含义
\b退格
\f换页
\n换行
\r回车
\t制表符
#按照"+++++++++++++++++++++++++"分隔打印
[root@hadoop01 02]# cat test1.txt | awk -F ' ' '{OFS="+++++++++++++++++++++++++"}{print$1,$2,43,$4}'
zhangsan+++++++++++++++++++++++++68+++++++++++++++++++++++++43+++++++++++++++++++++++++26
lisi+++++++++++++++++++++++++98+++++++++++++++++++++++++43+++++++++++++++++++++++++96
wangwu+++++++++++++++++++++++++38+++++++++++++++++++++++++43+++++++++++++++++++++++++86
zhaoliu+++++++++++++++++++++++++78+++++++++++++++++++++++++43+++++++++++++++++++++++++36
maq+++++++++++++++++++++++++88+++++++++++++++++++++++++43+++++++++++++++++++++++++66
zhouba+++++++++++++++++++++++++98+++++++++++++++++++++++++43+++++++++++++++++++++++++46
# 按照 制表符tab 进行分割, 打印
[root@hadoop01 02]# cat test1.txt | awk -F ' ' '{OFS="\t"}{print$1,$2,43,$4}'                       
zhangsan        68      43      26
lisi    98      43      96
wangwu  38      43      86
zhaoliu 78      43      36
maq     88      43      66
zhouba  98      43      46

调用 awk 提供的函数

命令含义
awk -F ‘,’ ‘{print toupper($2)}’ 1.txt操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容

常用函数如下:

函数名含义作用
toupper()upper字符 转成 大写
tolower()lower字符 转成小写
length()length返回 字符长度
#将第一段大写打印
[root@hadoop01 02]# cat test1.txt | awk -F ' ' '{OFS="+++++++++++++++++++++++++"}{print toupper($1,$2)}'      
awk: 致命错误: 2 是 toupper 的无效参数个数
[root@hadoop01 02]# cat test1.txt | awk -F ' ' '{OFS="+++++++++++++++++++++++++"}{print toupper($1)}'   
ZHANGSAN
LISI
WANGWU
ZHAOLIU
MAQ
ZHOUBA

if语句 查询符合条件的数字

命令含义
awk -F ‘,’ ‘{if($4>60) print $1, $4 }’ test1.txt如果第四段数字大于60,就显示 $1, $4
awk -F ‘,’ ‘{if($4>60) print $1, $4, “大于60”; else print $1, $4, “小于等于60”}’ test1.txt

选项

参数含义
if($0 ~ “aa”) print $0如果这一行包含 “aa”, 就打印这一行内容
if($1 ~ “aa”) print $0如果**第一段 **包含 “aa”, 就打印这一行内容
if($1 == “lisi”) print $0如果第一段 等于 “lisi”, 就打印这一行内容
# 打印$4大于60的数据,注意括号
[root@hadoop01 02]# cat test1.txt | awk -F ' ' '{if($4>60} print $1,$4,"大于60"'
awk: {if($4>60} print $1,$4,"大于60"
awk:          ^ syntax error
awk: {if($4>60} print $1,$4,"大于60"
awk:            ^ syntax error
awk: 命令行:1: {if($4>60} print $1,$4,"大于60"
awk: 命令行:1:                                  ^ 未预期的新行或字符串结束
[root@hadoop01 02]# cat test1.txt | awk -F ' ' '{if($4>60} print $1,$4,"大于60"}'
awk: {if($4>60} print $1,$4,"大于60"}
awk:          ^ syntax error
awk: {if($4>60} print $1,$4,"大于60"}
awk:            ^ syntax error
[root@hadoop01 02]# cat test1.txt | awk -F ' ' '{if($4>60 print $1,$4,"大于60"}' 
awk: {if($4>60 print $1,$4,"大于60"}
awk:           ^ syntax error
[root@hadoop01 02]# cat test1.txt | awk -F ' ' '{if($4>60) print $1,$4,"大于60"}'
lisi 96 大于60
wangwu 86 大于60
maq 66 大于60

# 打印大于60,和小于等于60的数据
[root@hadoop01 02]# cat test1.txt | awk -F ' ' '{if($4>60) print $1,$4,"大于60";else print $1,$4,"小于等于60"}'
zhangsan 26 小于等于60
lisi 96 大于60
wangwu 86 大于60
zhaoliu 36 小于等于60
maq 66 大于60
zhouba 46 小于等于60

求指定段平均数

命令含义
awk ‘BEGIN{初始化操作}{每行都执行} END{结束时操作}’ 文件名BEGIN{ 这里面放的是执行前的语句 }
{这里面放的是处理每一行时要执行的语句}
END {这里面放的是处理完所有的行后要执行的语句 }

# 查看和  awk -F ' ' 'BEGIN{}{}END{}'    
[root@hadoop01 02]# cat test1.txt | awk -F ' ' 'BEGIN{}{}END{}'                                                
[root@hadoop01 02]# cat test1.txt | awk -F ' ' 'BEGIN{}{total=total+$4}END{print total}'
356

# 查看总和, 总行数
[root@hadoop01 02]# cat test1.txt | awk -F ' ' 'BEGIN{}{total=total+$4}END{print total,NR}'
356 6

# 查看总和, 总行数, 平均分
[root@hadoop01 02]# cat test1.txt | awk -F ' ' 'BEGIN{}{total=total+$4}END{print total,NR,(total/NR)}'
356 6 59.3333

9 .sed

  • 通过 sed 可以实现 过滤替换 的功能.

实现 查询 功能

命令含义
sed 可选项 目标文件对目标文件 进行 过滤查询替换

可选参数

可选项英文含义
pprint打印
$代表 最后一行
-n仅显示处理后的结果
-eexpression根据表达式 进行处理
可选项含义
=打印当前行号
# 查看所有内容
[root@hadoop01 02]# cat test3.txt 
aaa java root
bbb hello
ccc rt
ddd root nologin
eee rtt
fff ROOT nologin
ggg rttt


# 查看前3~5行内容
[root@hadoop01 02]# cat test3.txt | sed -n -e '3,5p'
ccc rt
ddd root nologin
eee rtt

#查看3到最后一行$的内容
[root@hadoop01 02]# cat test3.txt | sed -n -e '3,$p'
ccc rt
ddd root nologin
eee rtt
fff ROOT nologin
ggg rttt

#查看3到最后一行$的内容,并显示行号
[root@hadoop01 02]# cat -n test3.txt | sed -n -e '3,$p'
     3  ccc rt
     4  ddd root nologin
     5  eee rtt
     6  fff ROOT nologin
     7  ggg rttt
     
     #展示行号
     [root@hadoop01 02]# cat test3.txt | sed -n -e '3,$=' 
3
4
5
6
7
#行号加内容
[root@hadoop01 02]# cat test3.txt | sed -n -e '3,$=' -e '3,$p'
3
ccc rt
4
ddd root nologin
5
eee rtt
6
fff ROOT nologin
7
ggg rttt
   
#找到包含root的内容   
[root@hadoop01 02]# cat test3.txt | sed -n -e '/root/p'
aaa java root
ddd root nologin


[root@hadoop01 02]# cat test3.txt | awk '/root/'
aaa java root
ddd root nologin


[root@hadoop01 02]# cat test3.txt | grep root
aaa java root
ddd root nologin

可选项英文含义
Iignore忽略大小写
#展示含有root(不区分大小写)的内容和行号
[root@hadoop01 02]# cat -n test3.txt | sed -n -e '/root/Ip'
     1  aaa java root
     4  ddd root nologin
     6  fff ROOT nologin
     
     [root@hadoop01 02]# cat -n test3.txt | awk '/[rR][oO][oO][tT]/'  
     1  aaa java root
     4  ddd root nologin
     6  fff ROOT nologin
     
     [root@hadoop01 02]# cat -n test3.txt | grep -i root
     1  aaa java root
     4  ddd root nologin
     6  fff ROOT nologin
可选项英文含义
-rregexp-extended识别正则
# 字母`r`后面是多个t的行,并显示行号
[root@hadoop01 02]# cat -n test3.txt | sed -n -e '/r+t/Ip'      
[root@hadoop01 02]# cat -n test3.txt | sed -n -e -r '/r+t/Ip'
sed:-e 表达式 #1,字符 1:未知的命令:“-”
[root@hadoop01 02]# cat -n test3.txt | sed -n -r -e '/r+t/Ip'
     3  ccc rt
     5  eee rtt
     7  ggg rttt
[root@hadoop01 02]# cat -n test3.txt | sed -n -r -e '/r+t/p' 
     3  ccc rt
     5  eee rtt
     7  ggg rttt

实现 删除 功能

可选项英文含义
ddelete删除指定内容
# 删除前3行数据,并显示行号
[root@hadoop01 02]# cat -n test3.txt | sed -e '1,3d' 
     4  ddd root nologin
     5  eee rtt
     6  fff ROOT nologin
     7  ggg rttt
     
   

[root@hadoop01 02]# nl test3.txt | sed -e '1,3d'      
     4  ddd root nologin
     5  eee rtt
     6  fff ROOT nologin
     7  ggg rttt

实现 修改 功能

  • 练习1: 在01.txt的第二行 下面 添加aaaaa,并显示行号
参数英文含义
iinsert目标前面 插入内容
aappend目标后面 追加内容

答案:

#第三行 下面 sjhshjfdhdadhakdajdha,并显示行号
[root@hadoop01 02]# nl test3.txt | sed -e '3a sjhshjfdhdadhakdajdha'
     1  aaa java root
     2  bbb hello
     3  ccc rt
sjhshjfdhdadhakdajdha
     4  ddd root nologin
     5  eee rtt
     6  fff ROOT nologin
     7  ggg rttt
     
 #在第一行前加sjhshjfdhdadhakdajdha
 [root@hadoop01 02]# nl test3.txt | sed -e '1i sjhshjfdhdadhakdajdha'
sjhshjfdhdadhakdajdha
     1  aaa java root
     2  bbb hello
     3  ccc rt
     4  ddd root nologin
     5  eee rtt
     6  fff ROOT nologin
     7  ggg rttt

实现 替换 功能

英文含义
s/oldString/newString/replace替换
#将root替换成bushanyantan
     
[root@hadoop01 02]# nl test3.txt | sed -e 's/root/bushanyantan/'    
     1  aaa java bushanyantan
     2  bbb hello
     3  ccc rt
     4  ddd bushanyantan nologin
     5  eee rtt
     6  fff ROOT nologin
     7  ggg rttt
选项英文
2c 新字符串replace使用新字符串 替换 选中的行
#把第二行替换成bushanyantan
[root@hadoop01 02]# nl test3.txt | sed -e '2c bushanyantan'     
     1  aaa java root
bushanyantan
     3  ccc rt
     4  ddd root nologin
     5  eee rtt
     6  fff ROOT nologin
     7  ggg rttt
     

我们之前的替换对原文件没有影响

对 原文件 进行操作

参数英文含义
-iin-place替换原有文件内容

答案:

# 备份原始文件内容
[root@node01 export]# cat 1.txt [root@hadoop01 02]# cp test3.txt  test4.txt
[root@hadoop01 02]# ll
总用量 12
-rw-r--r--. 1 root root 94 4月  17 18:52 test1.txt
-rw-r--r--. 1 root root 82 4月  17 19:31 test3.txt
-rw-r--r--. 1 root root 82 4月  17 20:15 test4.txt


# 替换
[root@hadoop01 02]# sed -i -e '2c bushanyantan' test3.txt 
[root@hadoop01 02]# cat test3.txt 
aaa java root
bushanyantan
ccc rt
ddd root nologin
eee rtt
fff ROOT nologin
ggg rttt

综合 练习

符号含义
^表示开始^aaa 表示以 aaa 开始
$表示结尾bbb$ 表示以 bbb 结尾
.*表示任意^.* 表示以 任意字符开始

获取ip地址

# 查看网卡信息
[root@hadoop01 02]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:36:8F:F0  
          inet addr:192.168.100.201  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe36:8ff0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:472555 errors:0 dropped:0 overruns:0 frame:0
          TX packets:123560 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:481323587 (459.0 MiB)  TX bytes:43834715 (41.8 MiB)

# 根据关键 搜索行
[root@hadoop01 02]# ifconfig eth0 | grep 'inet addr:'
          inet addr:192.168.100.201  Bcast:192.168.100.255  Mask:255.255.255.0
[root@hadoop01 02]# ifconfig eth0 | awk '/inet addr:/' 
          inet addr:192.168.100.201  Bcast:192.168.100.255  Mask:255.255.255.0
[root@hadoop01 02]# 
          
# 去掉ip地址以前的部分
[root@hadoop01 02]# ifconfig eth0 | awk '/inet addr:/'|sed -e 's/^*addr://'
          inet addr:192.168.100.201  Bcast:192.168.100.255  Mask:255.255.255.0

# 去掉ip地址以后的部分
[root@hadoop01 02]# ifconfig eth0 | awk '/inet addr:/'|sed -e 's/^*addr://' |sed -e 's/Bcast*//' 
          inet addr:192.168.100.201  :192.168.100.255  Mask:255.255.255.0
[root@hadoop01 02]# ifconfig eth0 | awk '/inet addr:/'|sed -e 's/^*addr://' |sed -e 's/Bcast*$//'
          inet addr:192.168.100.201  Bcast:192.168.100.255  Mask:255.255.255.0
[root@hadoop01 02]# ifconfig eth0 | awk '/inet addr:/'|sed -e 's/^*addr://' |sed -e 's/Bcast:*$//'
          inet addr:192.168.100.201  Bcast:192.168.100.255  Mask:255.255.255.0
[root@hadoop01 02]# ifconfig eth0 | awk '/inet addr:/'|sed -e 's/^*addr://' |sed -e 's/Bcast:.*$//'
          inet addr:192.168.100.201  
[root@hadoop01 02]# ifconfig eth0 | awk '/inet addr:/'|sed -e 's/^*>addr://' |sed -e 's/Bcast:.*$//'
          inet addr:192.168.100.201  
[root@hadoop01 02]# ifconfig eth0 | awk '/inet addr:/'|sed -e 's/^.*>addr://' |sed -e 's/Bcast:.*$//'
          inet addr:192.168.100.201  
[root@hadoop01 02]# ifconfig eth0 | awk '/inet addr:/'|sed -e 's/^.*addr://' |sed -e 's/Bcast:.*$//' 
192.168.100.201  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值