1.1 cut

cut:以某种方式按照文件的行进行分割

参数列表

-b 按字节选取 忽略多字节字符边界,除非也指定了 -n 标志

-c 按字符选取

-d 自定义分隔符,默认为制表符。

-f 与-d一起使用,指定显示哪个区域。

范围控制:

n:只有第n项

n-:从第n项一直到行尾

n-m:从第n项到第m项(包括m)

准备工作

vim 1.txt

111:aaa:bbb:ccc
222:ddd:eee:fff
333:ggg:hhh
444:iii

cat 1.txt | cut -c 1

练习1 截取出1.txt文件中前2行的第5个字符

答案:

head -2 1.txt | cut -c 5

练习2 截取出1.txt文件中前2行以”:”进行分割的第1,2段内容

答案:

head -2 1.txt | cut -d ':' -f 1,2

或者

head -2 1.txt | cut -d ':' -f 1-2

练习3

截取出1.txt文件中前2行以”:”进行分割的第1,2,3段内容

答案:

head -2 1.txt | cut -d ':' -f 1,2,3

或者

 head -2 1.txt | cut -d ':' -f 1-3

1.2 sort 的 工作原理

1.2.1 基本使用

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

[root@node01 tmp]# cat 01.txt
banana
apple
pear
orange
pear

[root@node01 tmp]# sort 01.txt
apple
banana
orange
pear
pear

1.2.2 sort的-u选项

它的作用很简单,就是在输出行中去除重复行。

[root@node01 tmp]# sort -u 01.txt 
apple
banana
orange
pear

pear由于重复被-u选项无情的删除了。

1. sort的-r 和 -n选项

[root@node01 tmp]# cat 02.txt 
1
3
5
7
11
2
4
6
10
8
9

sort默认的排序方式是升序

[root@node01 tmp]# sort 02.txt 
1
10
11
2
3
4
5
6
7
8
9

排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面

[root@node01 tmp]# sort -n 02.txt
1
2
3
4
5
6
7
8
9
10
11

-r表示降序,n表示按数字进行排序

[root@node01 tmp]# sort -n -r 02.txt
11
10
9
8
7
6
5
4
3
2
1

合并式

[root@node01 tmp]# sort -nr 02.txt  
11
10
9
8
7
6
5
4
3
2
1

1.3 wc命令

wc命令用于计算字数。

利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。

1.3.1 语法

参数:

  • -c或--bytes或--chars 只显示Bytes数。

  • -l或--lines 只显示行数。

  • -w或--words 只显示字数。

  • --help 在线帮助。

  • --version 显示版本信息。

1.3.2 准备工作

111
222 bbb
333 aaa bbb
444 aaa bbb ccc
555 aaa bbb ccc ddd
666 aaa bbb ccc ddd eee

1.3.3 需求: 统计指定文件行数 字数 字节数

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

wc 文件名 使用 wc统计,结果如下:

[root@hadoop01 ~]# wc 01.txt     
6 21 85 01.txt

wc 01.txt       # 01.txt 文件的统计信息
6 21 85 01.txt   # 01.txt文件: 行数为6, 单词数为 21, 字节数为 85
其中,3 个数字分别表示 01.txt文件的行数、单词数,以及该文件的字节数。

1.3.4 需求: 统计多个文件的 行数 单词数 字节数

如果想同时统计多个文件的信息,例如同时统计01.txt 、02.txt 、03.txt,可使用如下命令:

[root@hadoop01 ~]# wc 01.txt 02.txt 03.txt
6 21 85 01.txt
2   3 12 02.txt
3   6 25 03.txt
11 30 122 总用量

1.3.5 需求: 查看 根目录下有多少个文件

[root@hadoop01 ~]# ls /
bin   cgroup etc   lib   lost+found misc net proc sbin     srv tmp var
boot dev     home lib64 media       mnt   opt root selinux sys usr
[root@hadoop01 ~]# ls / | wc -w
23

1.4 uniq

uniq 命令用于检查及删除文本文件中重复出现的行,一般与 sort 命令结合使用。

1 参数说明:

-c 统计行数

2 准备工作

vim 5.txt

张三    98
李四    100
王五    90
赵六    95
麻七    70
李四    100
王五    90
赵六    95
麻七    70

3 练习1 去除5.txt中重复的行

答案:

cat 5.txt | sort | uniq

4 练习2 统计5.txt中每行内容出现的次数

答案:

cat 5.txt | sort | uniq -c

1.5 tee

tee 和 >类似,重定向的同时还在屏幕输出 参数说明: tee -a 内容追加 和 >> 类似

[root@hadoop01 tmp]# echo 'aaa' | tee 1.txt
aaa

[root@hadoop01 tmp]# cat 1.txt
aaa

[root@hadoop01 tmp]# echo 'bbb' | tee -a 1.txt
bbb

[root@hadoop01 tmp]# cat 1.txt
aaa
bbb
练习1 统计5.txt中每行内容出现的次数输出到a.txt,并且把内容显示在控制台

答案:

sort 5.txt | uniq -c | tee a.txt
练习2 统计5.txt中每行内容出现的次数输出追加到a.txt,并且把内容显示在控制台

答案:

sort 5.txt | uniq -c | tee -a a.txt

1.6 tr

Linux tr 命令用于转换或删除文件中的字符。 tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。

-d, --delete:删除指令字符

练习1 把itheima的小写i换成大写I

答案:

echo "itheima" | tr 'i' 'I'

练习2 把itheima的小写i和a换成大写I和A

答案:

echo "itheima" | tr 'i' 'I' | tr 'a' 'A'

练习3 把itheima的转换为大写

答案:

echo "itheima" |tr '[a-z]' '[A-Z]'

练习4 删除abc1d4e5f中的数字

答案:

echo 'abc1d4e5f' | tr -d '[0-9]'

练习5 单词计数

words.txt中的内容如下:
hello,world,hadoop
hive,sqoop,flume,hello
kitty,tom,jerry,world
hadoop
cat words.txt | tr -s ',' '\n' | sort | uniq -c | sort -r | awk '{print $2, $1}'

脚本解释:

tr -s ' ' '\n'     表示:连续出现的空格只保留一个,并在空格处以换行符分割文本 ​ tr -s ',' '\t' 表示 ,使用 tab代替

sort 表示:对输出文本进行排序

uniq -c 表示:对连续出现的重复的行进行计数

sort -r 表示:对输出文本进行降序排序

awk '{print $2, $1}' 表示:打印出文本的第二列和第一列

1.7 split

该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件 参数说明:     -b<字节> : 指定每多少字节切成一个小文件     -l<行数> : 指定每多少行切成一个小文件

练习1 从/etc目录下查找以conf结尾的文件,并所有文件内容写入到v.txt

答案:

find /etc/ -type f -name "*conf" -exec cat {} >> v.txt \;

[root@hadoop01 tmp]# rm -rf *

[root@hadoop01 tmp]# ll

总用量 0

[root@hadoop01 tmp]# find /etc/ -type f -name "*conf" -exec cat {} >> v.txt \;

[root@hadoop01 tmp]# ll

总用量 420

-rw-r--r--. 1 root root 429746 3月  17 23:15 v.txt

[root@hadoop01 tmp]# wc v.txt

12982  56922 429746 v.txt

练习2 把v.txt进行分割

答案:

split v.txt

练习3 把v.txt按2000进行分割

答案:

split -l 2000 v.txt

练习4 把v.txt按10k进行分割

答案:

du –sh v.txt

split -b 10k v.txt

hadoop数据的划分, 这个是物理上真真实实的进行了划分,数据文件上传到HDFS里的时候,需要划分成一块一块,默认的每个块128MB。

1.8 awk

1.8.1 简介

awk是一种处理文本文件的命令,是一个强大的文本分析工具。但是比较复杂,不过功能比sed更加的强大,它支持分段。默认每行按空格或TAB分割。

1.1 选项参数说明:     -F 指定输入文件折分隔符

1.8.2 默认分段

默认每行按空格或TAB分割,使用$n来获取段号

vim 1.txt

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

练习1 创建1.txt,输入内容,打印出第1段

答案:

awk '{print $1}' 1.txt

练习2 打印出1.txt的第1,2,3段

答案:

awk '{print $1,$2,$3}' 1.txt

练习3 打印出1.txt的第1,2,3段,并且使用#号连接

答案:

awk '{print $1"#"$2"#"$3}' 1.txt

1.8.3 段之间的连接符OFS

练习1

打印1,2,3段,指定#为连接符

答案:

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

1.8.4 指定分隔符

-F 来指定分隔符

  • 准备工作

vim 2.txt

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

练习1

打印出2.txt的第1段

答案:

awk -F ':' '{print $1}' 2.txt

练习2

打印出2.txt的所有段

答案:

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

练习3

打印出2.txt的第1,3段

答案:

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

1.8.5 内容匹配

练习1 匹配2.txt中包含cc的内容

答案:

awk '/cc/' 2.txt

练习2

匹配2.txt中第1段包含cc的内容

答案:

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

练习3

匹配2.txt中第1段包含至少连续两个c的内容

答案:

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

练习4

在2.txt中如果匹配到aaa就打印第1,3段,如果匹配到ccc,就打印第1,3,4段

答案:

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

练习5

在2.txt中如果匹配到aaa或者ddd,就打印全部内容

答案:

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

1.8.6 段内容判断

练习1

在2.txt中如果第3段等于222就打印所有内容

答案:

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

练习2

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

答案:

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

练习3

在2.txt中如果第3段大于等于300就打印第一段

答案:

awk -F ':' '$3>=300 {print $0}'  2.txt

练习4

在2.txt中如果第5段不等于cccc就打印全部

答案:

awk -F ':' '$5!="cccc" {print $0}' 2.txt

练习5

在2.txt中如果第1段等于ccc,并且第2段大于300就打印全部

答案:

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

练习6

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

答案:

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

1.8.7 段之间的比较

练习1

在2.txt中如果第3段小于第4段就打印全部

答案:

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

练习2

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

答案:

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

1.8.8 NR行号和 NF段数

练习1

打印2.txt全部内容显示行号

答案:

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

练习2

打印2.txt全部内容显示段数

答案:

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

练习3

打印2.txt前2行,并显示行号 (用三种不同的方式实现)

答案:

nl 2.txt | head -2

nl 2.txt | sed -n -e '1,2p'
   
awk -F ':' 'NR<=2 {print NR " " $0}' 2.txt

练习4

打印2.txt前2行,并且第1段匹配 aaa或者eee,打印全部,打印行号 (用两种方式)

答案:

nl 2.txt | head -2 | awk -F ':' '$1 ~ /aaa|eee/'

或者

awk -F ':' 'NR<=2 && $1 ~ /aaa|eee/ {print NR " " $0}'  2.txt

练习5 从2.txt的前3行中匹配出第2段等于 666,并显示行号(用两种方式)

答案:

nl passwd | head -n 3 | awk -F ":" '$7=="/sbin/nologin" {print $0}'

或者

awk -F ':' 'NR<=3 && $2==666 {print $0}' 2.txt

练习6

从2.txt前3行,把第1段内容替换为itheima,指定分隔符为|,显示行号(用两种方式)

答案:

nl 2.txt | head -3 | awk -F ':' '{OFS="|"} $1="itheima" {print NR "  " $0}'

或者

awk -F ':' '{OFS="|"} NR<=3 && $1="itheima" {print NR "  " $0}'  2.txt

1.8.9 分段求和

awk脚本,我们需要注意两个关键词BEGIN和END。 BEGIN{ 这里面放的是执行前的语句 } {这里面放的是处理每一行时要执行的语句} END {这里面放的是处理完所有的行后要执行的语句 }

2.8.1 练习1 对2.txt中的第2段求和

答案:

awk -F ':' 'BEGING{}{total=total+$2}END{print total}'  2.txt

1.8.10 综合练习

练习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")  }  }'

1.9 sed

简介

sed命令是来处理文本文件。sed也可以实现grep的功能,但是要复杂一些。 它的强大之处在于替换。并且对于正则也是支持的。

  • 参数说明:

    -n 仅显示处理后的结果 -e 以选项中指定的脚本来处理输入的文本文件 -f 以选项中指定的脚本文件来处理输入的文本文件

  • 动作说明:

    p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行 d :删除 a :新增,内容出现在下一行 i :插入, 内容出现在上一行 c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行 s :取代,可以直接进行取代的工作!通常这个 s 的动作可以搭配正规表示法! = :显示行号

准备数据

vim 1.txt

aaa java root
bbb hello
ccc rt
ddd root nologin
eee rtt
fff ROOT nologin
ggg rttt

1.9.1-n和p的组合:查找

练习1

查找01.txt中包含root行

答案:

sed -n -e '/root/p' 01.txt

练习2

查找出01.txt中包含一个或多个r,r后面是t,并显示行号

答案:

nl 01.txt | sed -nr -e '/r+t/p'

或者

sed -nr -e '/r+t/p' -e '/r+t/=' 01.txt

练习3

列出01.txt的第2行数据,并显示行号

答案:

nl 01.txt | sed -n -e '2p'

练习4 列出01.txt的第2到第5行数据,并显示行号

答案:

nl 01.txt |sed -n -e '2,5p'        # 显示行号

练习5 列出01.txt全部的数据,并显示行号

答案:

nl 01.txt
cat -n 01.txt
sed -n -e '1,$p' -e '1,$=' 01.txt

练习6

列出01.txt中包含root的内容,root不区分大小写,并显示行号

答案:

nl 01.txt | sed -n -e '/root/Ip'

nl 01.txt | grep -i root

cat -n 01.txt | grep -i root

1.9.2 d 删除

练习1

删除01.txt中前3行数据,并显示行号

答案:

nl 01.txt | sed -e '1,3d'

练习2

保留01.txt中前4行数据,并显示行号

答案:

nl 01.txt | sed -e '5,$d'

1.9.3 a 和i 添加

a:在行后面插入 (append)     i:在行前面插入 (insert)

练习1:

在01.txt的第二行后添加aaaaa,并显示行号

答案:

nl 01.txt | sed '2a aaaaa'

练习2

在01.txt的第1行前添加bbbbb,并显示行号

答案:

nl 01.txt | sed -e '1i bbbbb'

1.9.4 s和c替换

s:对字符串进入替换  c:对行进行替换

练习1

把01.txt中的nologin替换成为itheima,并显示行号

答案:

nl passwd | sed -e 's/nologin/itheima/'

练习2

把01.txt中的1,2行替换为aaa,并显示行号

答案:

nl passwd | sed -e '1,2c aaa'

1.9.5 对原文件进行操作

注意:在进行操作之前,最好是对数据进行备份,放置操作失误,数据无法恢复!

练习1

删除01.txt中前2行数据,并且删除原文件中的数据

答案:

sed -i -e '1,2d' 01.txt

nl passwd 查看数据

练习2

在01.txt中把nologin替换为itheima

答案:

sed -i -e 's/nologin/itheima/' 01.txt

练习3

在01.txt文件中第2、3行替换为aaa

答案:

sed -i -e '2,3c aaa' 01.txt

1.9.6 综合练习

练习1

获取ip地址

答案:

ifconfig eth0 | grep 'inet addr:' | sed -e 's/^.addr://' | sed -e 's/Bcast.//'

练习2

从01.txt中提出数据,删除前5行,并把nologin替换为itheima,并显示行号

答案:

nl 01.txt | sed -e '1,5d' | sed -e 's/nologin/itheima/'

练习3

从01.txt中提出数据,匹配出包含root的内容,再把nologin替换为itheima

答案:

nl 01.txt | grep 'root' | sed -e 's/nologin/itheima/'

或者

nl 01.txt | sed -n -e '/root/p' | sed -e 's/nologin/itheima/'

或者

nl 01.txt | sed -n -e '/root/{s/nologin/itheima/p}' #只显示替换内容的行

linux 管道相关命令(待学)的更多相关文章

  1. Linux文件管理相关命令

    Linux文件管理相关命令   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在了解了Linux文件管理背景知识之后, 我们可以 ...

  2. Linux进程相关命令使用场景

    Linux进程相关命令使用场景 在Linux系统上工作时,我们常常会碰到很多和进程相关的查询场景,今天在这里进行详细的讲解,进程相关的对象包括以下几个: 端口:Port 进程号:PId 执行文件所在路 ...

  3. Linux 网络相关命令 Cheat Sheet

    以下漫画形式呈现的常用 Linux 网络相关命令速查表来自 twitter -

  4. Linux性能相关命令

    Linux性能相关命令 目录 Linux性能相关命令 1. 查看硬盘相关信息 2. 查看CPU相关信息 3. 查看内存相关信息 4. 查看进程运行的信息 1. 查看硬盘相关信息 cat /proc/s ...

  5. Linux解压缩相关命令

    Linux解压缩相关命令 运行级别: 0:关机 1:单用户 2:多用户无网络连接 3:多用户有网络连接 4:系统保留 5:图形界面 6:系统重启 通过init[0123456]来切换不同的运行级别 g ...

  6. Linux 文本相关命令(1)

    Linux 文本相关命令(1) 前言 最近线上环境(Windows Server)出现了一些问题,需要分析一下日志.感觉 Windows 下缺少了一些 Linux 系统中的小工具,像在这波操作中用到的 ...

  7. Linux文本相关命令

    Linux文本相关命令 目录 Linux文本相关命令 文本排序命令 文本去重命令 基础命令cut 文本三剑客 sed awk grep 文本排序命令 sort 常用参数: -n:以数值大小进行排序 - ...

  8. linux:相关命令以及笔记

    首先,在linux 或者 unix里没有任何的反馈就叫成功,例如: (1)命令执行成功的样子:返回了登录用户信息 (2)命令执行失败的样子:没有返回任何东西 1.按键出现状况 解决:可以使用ctrl+ ...

  9. linux 搜索相关命令(2)

    文件搜索相关命令 1:locate命令 需要 yum install mlocate locate 文件名 在后台数据库中按文件名搜索,搜索速度更快 /var/lib/mlocate #locate命 ...

随机推荐

  1. 可以使用的一些API(转存)

    聚合数据 juhe.com 转存的格式不如原文的好看,可以直接访问原文 https://www.jianshu.com/p/9a0acf69b789 api接口应该会越来越火,上个全的,楼主自己找找吧 ...

  2. 无需QQ成为好友,直接启动QQ客户端聊天

    <a style="color:#fff; margin-left:8px; padding-top:12px;" target="_parent" hr ...

  3. XSS 4

    第四题 进去后是这个样子的 然后我们随便输入第三题中的数据发现 不可以运行 看一下右边 发现()被替换成空内容 然后我们改一下  括号可以用倒引号替换 然后我们改一下 然后就通过了 原因:这个题是有关 ...

  4. python中给函数传参是传值还是传引用

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

  5. ISR吞吐性能问题

    ISR大致可以分几类: Cisco 860.880.890 ISR1800 (fixed).1800 (modular).2800.3800 Series ISR1900.2900.3800.3900 ...

  6. jquery 相同ID 绑定事件

    本文链接:https://blog.csdn.net/lan_13217/article/details/84079441 http://hi.baidu.com/meneye/blog/item/1 ...

  7. 每天进步一点点------SOPC的Avalon-MM IP核(四) KEY_LED IP定制

    /********************************************************************************* * Company : * Eng ...

  8. webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错:

    webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错. 原因是: 局部变量ip跟全局变量冲突的问题,可以将局部变量重新命名一下,就可以通过编译了. aec_rdft.c修改以后文件代 ...

  9. ARM64架构下面安装mysql5.7.22

    MySQL下载地址为: https://obs.cn-north-4.myhuaweicloud.com/obs-mirror-ftp4/database/mysql-5.7.27-aarch64.t ...

  10. C#面向对象三大特性:继承

    什么是继承 定义:继承是面向对象编程语言中的一个重要特性,当一个类A能够获取另一个类B中所有非私有的数据和操作的定义作为自己的部分或全部成分时,就称这两个类之间具有继承关系.被继承的类B称为父类或基类 ...