shell脚本(三)

shell脚本(三)

2、文件排序、合并和分割

(1)sort命令

#-c:测试文件是否已经排序;-k:指定排序域;-m:合并两个已经排序的文件;

#-n:根据数字大小进行排序;-o:将输出写到文件;-r:将排序结果逆向显示

#-t:改变域分隔符;-u:去除结果中的重复行

#将a.txt逆向排序,并去除重复的行

sort -u -r a.txt

#以":"为分隔符,根据第3域数字大小来对/etc/passwd排序

sort -t: -k3n /etc/passwd

#合并已经排序的两个文件,需要合并的两个文件一定是已经排序了的

sort -u -m a.txt b.txt

#根据第2域来排序

sort -k2 a.txt

(2)uniq命令

#去除文本中重复的行,-c:打印第行在文本中重复出现次数;-d:只显示有重复的记录,

#每个重复记录只出现一次;-u:只显示没有重复的记录

#需要特别注意的是所说的"重复"是指连续出现的重复!如文件test.txt内容:

1

1

2

1

uniq -c test.txt

#结果为,第1行数字1出现次数为2,第2行数字2出现次数为1,第4第数字1出现次数为1

2 1

1 2

1 1

#再如

#如果需要统计文件中所有重复的行,则需要先对它进行排序

sort 10.txt | uniq -c 10.txt

#注意与uniq -c 10.txt的区别

#只显示重复的行,注意两者区别

uniq -d 10.txt

sort 10.txt | uniq -d 10.txt

#只显示没有重复的行,注意文件排序前后去除重复行结果对比

#因为第1行开始数字1连续出现3次,所以uniq -u 10.txt 不会在第1行显示1

(3)join命令

#实现两个文件记录的连接,需要注意的是连接的文件要先进行排序,否则报错!

#必需对连接域进行排序再连接,否则报错!

#-i:比较域内容时,忽略大小写差异;-o:设置结果显示的格式;-t:改变域分隔符;

#-1和-2:-1设置文件1用于连接的域,-2设置文件2用于连接的域

#-a1或-a2:除了显示共同域进行连接的结果外,-a1表示还显示文件1中没有共同

#域的记录;-a2表示显示文件2中没有共同域的记录

#连接两个文件相同的域,域以":"为分隔符,注意"B lily"和"B Lily"是不同的!

join -t: a.txt b.txt

#添加-i忽略大小写连接效果

join -t: -i a.txt b.txt

#显示文件1第1域、文件2第3域和文件1第2域

#-v1:不显示文件1以共同域进行连接的结果

#-v2:不显示文件2以共同域进行连接的结果

#-1:文件1需要连接的域;-2:文件2需要连接的域。指定域必需要先进行排序

#默认比较文件1和文件2的第1域。

#以文件1的第1域和文件2的第3域连接

join -t: -1 1 -2 3 name.txt num.txt

(4)cut命令

#cut从标准输入或文本文件中按域或行提取文本

#-c:指定提取的字符数或字符范围;-f:指定提取的域数或域范围;-d:指定域分隔符

#cut从标准输入或文本文件中按域或行提取文本

#-c:指定提取的字符数或字符范围;-f:指定提取的域数或域范围;-d:指定域分隔符

#-cm-n:表示第m到第n个字符;-cm,n:表示第m和第n个字符;

#-cn:表示n个字符;-cn-:表示从第n个字符到最后一个字符。

#-fm-n:表示第m到第n个域;-fm,n:表示第m域和第n域;-fn:表示第n域;

#-fn-:表示从第n域到最后一个域。与-c类似。

#提取第5个字符

cut -c5 name.txt

#提取第4到第6个字符

cut -c4-6 name.txt

#提取第2到最后字符

cut -c2- name.txt

#提取第2和第6个字符

cut -c2,6 name.txt

#以":"为分隔符,提取第1域

cut -d: -f1 num.txt

#以":"为分隔符,提取第1域到第3域

cut -d: -f1-3 num.txt

#以":"为分隔符,提取第2域到最后1域

cut -d: -f2- num.txt

#以":"为分隔符,提取第1域和第4域

cut -d: -f1,4 num.txt

#提取第3域的第5个字符

cut -d: -f3 num.txt | cut -c5

(5)paste命令

#将文本或标准输出中的内容粘贴到新的文件,可将来自不同文件的数据粘贴到一起

#-d:指定分隔符,默认为空格或tab;-s:将每个文件粘贴成1行;-:从标准输出读取数据

#合并name.txt和num.txt,并以"-"作为分隔符

paste -d- name.txt num.txt

#以"-"为分隔符,一个文件1行来将name.txt和num.txt合并

#即每一个文件行与行之间以"-"作为连接,将所有行连接成1行

#后面的文件以同样方式连接,然后追加到上一个文件最后面,最终一个文件1行

paste -d- -s name.txt num.txt

#合并name.txt和num.txt,并以默认分隔符作为分隔符

paste -s name.txt num.txt

(6)split命令

#split 选项 file star_name,切割的文件名以start_name开头,默认以x开头

#将大文件切割成小文件,可以按照文件的行数、字节数切割文件,并能在输出的小

#小文件中自动加上编号

#-数字n或-l数字n:以n行作为一个文件;-b:指定多少个字节作为一个文件;

#-C:与-b类似,但是是切割时尽量维护每行的完整性

#以2行作为1个文件,切割文件名以startname开头

split -2 name.txt startname

时间: 2024-10-12 08:02:26

shell脚本(三)的相关文章

Shell脚本(三)重定向

先上一张图: 代码如下: #!/bin/bash echo "hello world" echo `ls +` 直接运行,终端输出两行文字:

shell脚本编程基础知识

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务. Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell.bash是很多linux系统的默认shell. 下面开始写一个范例shell #!/bin/bashecho "Hello World

Shell脚本学习指南 [ 第三、四章 ] 查找与替换、文本处理工具

摘要:第三章讨论的是编写Shell脚本时经常用到的两个基本操作.第四章总共介绍了约30种处理文本文件的好用工具. 第三章 查找与替换 概括:本章讨论的是编写Shell脚本时经常用到的两个基本操作:文本查找.文本替换. 3.1  查找文本 如需从输入的数据文件中取出特定的文本行,主要的工具为grep程序.POSIX采用三种不同grep变体:grep.egrep.fgrep整合为单个版本,通过不同的选项,分别提供这三种行为模式.who | grep -F root上面使用-F选项,以查找固定字符串r

shell脚本应用(三)

防伪码:长风破浪会有时,直挂云帆济沧海 shell脚本应用(三) 前言:当面对各种列表重复任务时,使用if语句已经难以满足要求,而顺序编写全部代码更是显得异常繁琐,困难重重.使用循环.分支等其他程序控制结构,从而能够轻松完成更加复杂.强大的功能. 1. 使用for循环语句(读取不同的变量值,用来逐个执行同一组命令) 1) 根据姓名列表批量添加用户 准备员工列表文件users.txt,然后编写一个名为uaddfor.sh的脚本,从users.txt文件中读取各用户名称,重复执行添加用户,设置初始密

Shell脚本学习一:shell三种引号学习

一.Shell中变量的声明和引用 [[email protected] ~]# var1=Hello [[email protected] ~]# echo $var1 Hello [[email protected] ~]# echo ${var1}World HelloWorld 在Shell中,变量的引用使用$. 上面的代码中,$var1就是对变量var1的引用,输出的结果是Hello. 如果想链接其他字符,将变量放到大括号{}里面,然后在后面跟上其他内容. 例如上面的代码中:${var1

老李分享:《Linux Shell脚本攻略》 要点(三)

老李分享:<Linux Shell脚本攻略> 要点(三) 1.生产任意大小的文件 [[email protected] dd_test]#[[email protected] dd_test]# dd if=/dev/zero of=junk.data bs=1k count=1010+0 records in10+0 records out10240 bytes (10 kB) copied, 0.00137023 s, 7.5 MB/s 2.文件系统相关测试 [ -f $file_var

《Linux Shell脚本攻略》 笔记 第三章:文件操作

<Linux Shell脚本攻略> 笔记 第三章:文件操作 1.生产任意大小的文件 [[email protected] dd_test]# [[email protected] dd_test]# dd if=/dev/zero of=junk.data bs=1k count=10 10+0 records in 10+0 records out 10240 bytes (10 kB) copied, 0.00137023 s, 7.5 MB/s 2.文件系统相关测试 [ -f $file

8.17_Linux之bash shell脚本编程入门篇(三)之循环以及函数function的使用

bash shell脚本编程入门篇(三)之循环 什么是循环执行? 将某代码段重复运行多次 重复运行多少次: 循环次数事先已知 循环次数事先未知 有进入条件和退出条件 相关命令:for, while, until,selet, for命令的使用 作用: 依次将列表中的元素赋值给"变量名"; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束 命令格式: for 变量名 in 列表; do 循环体(正常执行的执行命令) 语句1 语句2 语句3 ... done 列表生成方式: (

Shell 脚本知识回顾 (三) —— 替换、运算符、字符串、数组

一.Shell替换:Shell变量替换,命令替换,转义字符 如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: #!/bin/bash a=10 echo -e "Value of a is $a \n" 运行结果: Value of a is 10 这里 -e 表示对转义字符进行替换.如果不使用 -e 选项,将会原样输出: Value of a is 10\n 下面的转义字符都可以用在 echo 中: 转义字符