`
tomotoboy
  • 浏览: 165158 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

shell合并和分割

阅读更多
• 实用的分类(sort)操作。
sort命令的一般格式为:
sort -cmu -o output_file [other options] +pos1 +pos2 input_files
下面简要介绍一下s o r t的参数:
-c 测试文件是否已经分类。
-m 合并两个分类文件。
-u 删除所有复制行。
-o 存储s o r t结果的输出文件名。
其他选项有:
-b 使用域进行分类时,忽略第一个空格。
-n 指定分类是域上的数字分类。
-t 域分隔符;用非空格或t a b键分隔域。
-r 对分类次序或比较求逆。
+n n为域号。使用此域号开始分类。
n n为域号。在分类比较时忽略此域,一般与+ n一起使用。
post1  传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7
个字符开始。
举例:
按第一个域分类
-bash-3.00$ sort -k0 sed.txt
打印分类后的最后第一行
-bash-3.00$ sort -k0 sed.txt | tail -1
打印分类后的第一行
-bash-3.00$ sort -k0 sed.txt | head -1
awk使用sort输出结果
-bash-3.00$ sort -k0 sed.txt | head -1 | awk '{if($1=="caodejun")print $1}'
将两个分类文件合并
-bash-3.00$ sort -m  sed.txt sort.txt
将文件合并前,它们必须已被分类。合并文件可用于事务处理和任何种类的修改操作。
下面这个例子,因为忘了把两个家电名称加入文件,它们被放在一个单独的文件里,现在将
之并入一个文件。分类的合并格式为‘sort -m sorted_file1 sorted_file2’。

删除重复行
-bash-3.00$ sort -u sed.txt


• uniq
uniq用来从一个文本文件中去除或禁止重复行。一般uniq假定文件已分类,并且结果正确。我们并不强制要求这样做,如果愿意,可以使用任何非排序文本,甚至是无规律行。
-bash-3.00$ who | awk '{print $1} ' |uniq
liuzk423
605408211
shuzigui
nefu_luyanshen
waterlooz
wsoangel
tomotoboy
xp55699312
zyy0904
caodejun
duke1988
605408211
nefu_luyanshen
zyy0904
lonelysand


显示不唯一的行
-bash-3.00$ who | awk '{print $1} ' |uniq -d

-c打印每一重复行出现次数。
-bash-3.00$ who | awk '{print $1} ' |uniq -c
   1 liuzk423
   1 605408211
   1 shuzigui
   1 nefu_luyanshen
   1 waterlooz
   1 wsoangel
   1 tomotoboy
   1 xp55699312
   1 zyy0904
   1 caodejun
   1 duke1988
   1 605408211
   1 nefu_luyanshen
   1 zyy0904
   1 lonelysand
这里没有搞懂nefu_luyanshen明明重复,却显示重复行数目为1

对特定域进行测试,使用-n只测试一行一部分的唯一性。
-bash-3.00$ who | awk '{print $1} ' |uniq -n2
liuzk423


• join
将两个已经分好类的文件连接在一起哈。一些系统要求使用join时文件域要少于20,为公平起见,如果域大于20,应使用DBMS系统,其一般格式如下:
join [options] in_file1 in_file2

-bash-3.00$ cat sed.txt
605408211   pts/16       Jul 31 13:54   (218.0.1.42)
caodejun   pts/44       Jul 31 14:16    (219.148.133.31)
duke1988   pts/45       Jul 31 14:41    (218.104.163.66)
liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)
nefu_luyanshen   pts/23       Jul 31 14:33      (218.25.6.142)
nefu_luyanshen   pts/48       Jul 31 12:59      (218.25.6.142)
shuzigui   pts/21       Jul 31 12:11    (121.35.248.193)
tomotoboy   pts/41       Jul 31 13:31   (219.221.99.155)
waterlooz   pts/25       Jul 31 08:48   (121.0.29.225)
wsoangel   pts/35       Jul 31 13:40    (116.233.219.10)
xp55699312   pts/42       Jul 31 14:12  (61.152.132.103)
zyy0904    pts/43       Jul 31 13:53    (125.33.195.36)
-bash-3.00$ cat sort.txt
605408211   pts/16       Jul 31 13:54   (218.0.1.42)
caodejun   pts/44       Jul 31 14:16    (219.148.133.31)
duke1988   pts/45       Jul 31 14:41    (218.104.163.66)
-bash-3.00$ join sed.txt sort.txt
605408211 pts/16 Jul 31 13:54 (218.0.1.42) pts/16 Jul 31 13:54 (218.0.1.42)
caodejun pts/44 Jul 31 14:16 (219.148.133.31) pts/44 Jul 31 14:16 (219.148.133.31)
duke1988 pts/45 Jul 31 14:41 (218.104.163.66) pts/45 Jul 31 14:41 (218.104.163.66)

选择匹配
-bash-3.00$ join -a1 -a2  sed.txt sort.txt
605408211 pts/16 Jul 31 13:54 (218.0.1.42) pts/16 Jul 31 13:54 (218.0.1.42)
caodejun pts/44 Jul 31 14:16 (219.148.133.31) pts/44 Jul 31 14:16 (219.148.133.31)
duke1988 pts/45 Jul 31 14:41 (218.104.163.66) pts/45 Jul 31 14:41 (218.104.163.66)
liuzk423 pts/6 Jul 20 08:27 (219.245.104.240)
nefu_luyanshen pts/23 Jul 31 14:33 (218.25.6.142)
nefu_luyanshen pts/48 Jul 31 12:59 (218.25.6.142)
shuzigui pts/21 Jul 31 12:11 (121.35.248.193)
tomotoboy pts/41 Jul 31 13:31 (219.221.99.155)
waterlooz pts/25 Jul 31 08:48 (121.0.29.225)
wsoangel pts/35 Jul 31 13:40 (116.233.219.10)
xp55699312 pts/42 Jul 31 14:12 (61.152.132.103)
zyy0904 pts/43 Jul 31 13:53 (125.33.195.36)
-bash-3.00$ join -o 1.1 2.2  sed.txt sort.txt
605408211 pts/16
caodejun pts/44
duke1988 pts/45
-bash-3.00$ join -o 1.1 2.2  2.3 sed.txt sort.txt
605408211 pts/16 Jul
caodejun pts/44 Jul
duke1988 pts/45 Jul


• cut
cut用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。
下一节将介绍粘贴用法。
cut一般格式为:
cut [options] file1 file2
下面介绍其可用选项:
-c list  指定剪切字符数。
-f field  指定剪切域数。
-d   指定与空格和t a b键不同的域分隔符。
- c用来指定剪切范围,如下所示:
- c 1,5-7  剪切第1个字符,然后是第5到第7个字符。
-c1-50  剪切前5 0个字符。
-f 格式与- c相同。
-f 1,5  剪切 第1域,第5域。
- f 1,10-12  剪切第1域,第1 0域到第1 2域。

-bash-3.00$ ps -ef | cut -c1-8
-bash-3.00$ ps -ef | cut -d: -f1
-bash-3.00$ ps -ef | cut -d: -f1,3


• paste
cut用来从文本文件或标准输出中抽取数据列或者域,然后再用 paste可以将这些数据粘贴
起来形成相关文件。粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相
同。
paste将按行将不同文件行信息放在一行。缺省情况下, paste连接时,用空格或tab键分隔
新行中不同文本,除非指定- d选项,它将成为域分隔符。paste格式为:
paste -d -s -file1 file2
选项含义如下:
-d   指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @。
-s   将每个文件合并成行而不是按行粘贴。
            - 使用标准输入。例如ls -l |paste ,意即只在一列上显示输出。


• split
split用来将大文件分割成小文件。有时文件越来越大,传送这些文件时,首先将其分割可
能更容易。使用v i或其他工具诸如sort时,如果文件对于工作缓冲区太大,也会存在一些问题。
因此有时没有选择余地,必须将文件分割成小的碎片。
split命令一般格式:
split -output_file-size input-filename output-filename
这里output_file-size 指的是文本文件被分割的行数。
-bash-3.00$ ps -ef |split -10
-bash-3.00$ ls
a.out            greeting.sh      main.c           sort.txt         xac              xai              xao
append.sed       grepgrepstrings  nohup.out        test             xad              xaj              xap
change.sed       grepstr          readme.sh        test.sh          xae              xak              xaq
core.log         hello            seawolf          user.online      xaf              xal              xar
factorial        hello.cpp        sed.out          xaa              xag              xam
factorial.c      main             sed.txt          xab              xah              xan
分享到:
评论

相关推荐

    linux shell 合并与分割

    linux shell 合并与分割

    shell编程和unix命令(1-20章)

    这部分会涵盖AWK的基本语法、模式匹配、字段分割和内建变量。 6. **sed用法介绍** (010sed用法介绍.PDF):sed(流编辑器)可以对文本流进行实时修改,包括替换、删除和插入文本。这部分会介绍sed的基本操作和工作...

    UNIX命令及SHELL编程

    11_文本过滤-合并与分割.PDF 12_文本过滤-tr 用法.PDF 13_登录环境-登录环境.PDF 14_登录环境-环境和shell变量.PDF 15_登录环境-引号.PDF 16_基础shell编程-shell脚本介绍.PDF 17_基础shell编程-条件测试.PDF...

    Linux Shell编程3/3

    _grep家族 |_awk介绍 |_sed用法介绍 |_合并与分割 |_tr用法 第三部分登录环境 |_登录环境 |_环境和shell变量 |_引号 第四部分基础shell编程 |_shell脚本介绍 |_条件测试 |_控制...

    Shell自学pdf.zip

    第11 章合并与分割.PDF 第12 章tr 用法.PDF 第13 章登录环境.PDF 第14 章环境和shell 变量.PDF 第15 章引号.PDF 第16 章shell 脚本介绍.PDF 第17 章条件测试.PDF 第18 章控制流结构.PDF 第19 章shell 函数.PDF 第20 ...

    shell编程 linux

    011合并与分割.pdf 012tr 用法.pdf 013登录环境.pdf 014环境和shell变量.pdf 015引号.pdf 016shell脚本介绍.pdf 017条件测试.pdf 018控制流结构.pdf 019shell 函数.pdf 020向脚本传递参数.pdf 021创建...

    LINUX与UNIX SHELL编程指南

    本书通过各种实用的系统管理小技巧和趣味脚本代码,详尽地介绍了shell编程各个不同的方面。学完本书后,你将成为一名shell编程高手。 内容简介 本书共分五部分 ,详细介绍了SHELL编程技巧,各种UNIX命令及语法,还...

    绝版经典 LINUX与UNIX SHELL编程指南 PDF 高清版 [16.3M]

    第十一章 合并与分割 第十二章 TR用法 第三部分 登录环境 第十三章 登录环境 第十四章 环境和SHELL变量 第十五章 小结 第四部分 基础SHELL编程 第十六章 SHELL脚本介绍 第十七章 条件测试 第十八章 控制流...

    shell命令精品教程

    8、grep 家族 9、AWK 介绍 10、sed 用法介绍 11、合并与分割 12、tr 的用法 13、登录环境 14、环境和shell 变量 15、引号 基础s h e l l编程 16、shell脚本...

    shell帮助文档

    11-合并与分割.pdf 12-tr 用法.pdf 13-登录环境.pdf 14-环境和shell变量.pdf 15-引号.pdf 16-shell脚本介绍.pdf 17-条件测试.pdf 18-控制流结构.pdf 19-shell 函数.pdf 20-向脚本传递参数.pdf 21-创建屏幕输出.pdf ...

    shell编程 shell编程 shell编程

    而`tr`, `cut`, `paste`, `join`等命令则提供了对文本进行分割、合并和格式化的能力。 最后,书中可能还会涉及一些系统管理问题,如计划任务(cron)、用户和权限管理,以及脚本调试技巧。这部分内容对于系统管理员...

    shell编程指南,shell脚本,本书共分五部分全。grep家族,sed,AWK,正则表达式,tr用法

    第11章 合并与分割 104 第12章 tr用法 119 第三部分 登录环境 第13章 登录环境 125 第14章 环境和shell变量 132 第15章 引号 146 第四部分 基础shell编程 第16章 shell脚本介绍 151 第17章 条件测试 154 第18章 ...

    Linux与UNIX Shell编程指南.rar

    第十一章 合并与分割 第十二章 TR用法 第三部分 登录环境 第十三章 登录环境 第十四章 环境和SHELL变量 第十五章 小结 第四部分 基础SHELL编程 第十六章 SHELL脚本介绍 第十七章 条件测试 第十八章 控制流结构 第...

    shell基础十二篇

    8. **文件分类、合并和分割**:`sort`用于排序文件,`uniq`去除重复行,`join`连接两个已排序文件,`cut`提取文件的部分列,`paste`合并多文件的对应行,`split`则将大文件拆分为多个小文件。 9. **tr**:转换和...

    高级shell编程 第二部分文本过 滤(共5部分)

    本文将深入探讨"高级shell编程"的第二部分——文本过滤,包括正则表达式、grep家族、AWK介绍、sed用法、文件合并与分割以及tr工具的使用。 首先,让我们来理解第7章——正则表达式介绍。正则表达式是一种强大的文本...

    Android ftp文件分割上传,并且实现合并

    为了实现合并,可以在服务器端使用Shell脚本或者编程语言(如Python、Java)编写一个程序,遍历指定目录下的所有小文件,按照正确的顺序读取内容并写入目标大文件。 总的来说,这个Demo展示了如何在Android设备上...

    Shell_经典实例

    此脚本实现了文件的分割与合并功能,可以将一个大文件分割成多个小文件,并提供了重新合并的脚本。 1. **参数检查**:首先验证传递的参数数量是否正确,即两个参数:待分割的文件名和每个分片的大小。 2. **文件...

    Linux shell脚本 精华中文版

    011_合并与分割_sort_join_uniq_cut_paste_split.pdf 012_tr的用法.pdf 013_登录环境.pdf 014_环境和shell变量.pdf 015_引号.pdf 016_基础shell编程_shell脚本介绍.pdf 017_条件测试_test_expr.pdf 018_控制...

Global site tag (gtag.js) - Google Analytics