在利用Unix操作系统在实现一些具体应用的时候,可能需要把某些显示的结果进行行与行之间的合并。如现在需要用Unix操作系统设计一个彩票软件,每一张彩票上最多可以打印五注内容。在Unix操作系统的数据文件中这五注内容是按五行来存放的。但是在报表显示的时候,可能希望对于同一张材料上的号码,能够在同一行上显示,不同的行码之间利用分隔符进行分割。此时就需要用到Unix操作系统中的合并行的实现方式。如下图所示:

如上图中,左边是原始文件,右边是需要的文件格式。那该如何实现呢?在Unix操作系统中,主要有两种方式可以实现这个需求。可能还有其他笔者不了解的实现方式。

第一种方式:利用vi命令中的J选项。

在一些文本处理软件中,要把某一行与下一行之间进行合并,这是很简单的一个操作。至需要把行与行之间的行分隔符删除即可。但是对于Unix操作系统中的vi命令这个做法没有效果。而且每天要卖出几百张彩票,每张彩票的号码都需要这么处理的话,那么用户还不把你骂死。为此系统工程师必须要想一些两全其美的方法,即可以实现行与行合并的需求,又不会增加很多的工作量。

此时如果能够灵活应用Unix操作系统中的vi命令中的J选项就可以实现这个需求。J选项主要用来删除行与行之间的换行符,并把下一行的内容添加到当前行的后面。不过在使用这个选项的时候,需要注意行的总长度是有限制的。在Unix操作系统中,一行的内容不能够超过vi允许的最大行长度,一般情况下为2000。不过在Linux操作系统中,则没有这方面的限制。从这个需求来看,一张彩票最多只能够打印五注号码,每注号码为7个字符,再彩票的序列号为8个字符,那么一行最多也就是50个字符(再加上四个分隔符)。

为此可以在校本程序中利用While 循环,把同一个彩票序号下的行进行合并(利用vi命令的J选项删除行分隔符),然后再在每个彩票号码后面加入|分隔符即可。不过vi命名与While循环语句结合时比较难以控制。笔者在实现类似需求的时候,不怎么利用这个vi命令,而是采用后面这种处理方式。

第二种处理方式:利用paste命令来实现。

Paste命令顾名思义就是一个粘贴命令。但是这个paste命令有比较多复杂的选项,利用这些选项可以实现一些比较复杂的需求。如果要实现以上的需求的话,那么主要需要使用的是paste命令中的-s与-d两个选项。

-d选项主要用来指定需要采用的分隔符。如需要把原先分布在不同行之内的彩票号码合并在同一行时,需要使用什么符号来进行分隔。为了提高合并后文件的可读性,行合并后的内容肯定需要采用分隔符进行分隔。Paste命令所采用的默认选项为空格符。也就是说如果不特殊指定的话,彩票号码之间是使用空格来进行分隔的。就如同“4522467 4672435”一般显示。但是这仍然不怎么直观。如果我们需要使用其他符号,如|符号来进行分隔的话,则需要利用-d选项来指定这个分隔符。

-s选项主要用来合并行。也就是说,使用paste命令的-s可选项可以实现像vi命令的J选项那样的功能,可以把多行的内容合并在一起。但是光用这个选项的话,还不能够实现如上的需求。如利用paste ?s num.txt命令,则操作系统是会把分布在各行中的内容合并起来,但是其是合并为一行。也就是说,如果一个文件中有300行的内容,那么其会把这些行的内容合并在一行,中间利用分隔符来进行分隔。这合并后的结果可读性会比较差,不是我们所希望看到的结果。

此时我们就需要把这连个选项来结合使用。要实现文章刚开始那样的需求,可以通过命令“paste ?s ?d “|||||\n” 文件名”来实现。采用这个命令后,操作系统会以循环的方式插入分隔符。如上面这个文件,其可以把第一行与第二行合并成一行,中间利用|分隔符进行分割;然后把第二行与第三行进行合并,中间也利用|分隔符进行合并。以此类推,直到把第五行与第六行进行合并,并利用|分隔符进行分隔。当第六行与第七行的时候,也是会先合并,但是其中会以一个分行符号进行分隔。此时其实就是另起一行的意思了。操作系统会按照这个运作方式,直到文件结束为止。最后这个文件的显示结果如下:

最后显示的结果与用户最终需要的结果可能稍微有点差别。如用户需要利用|分隔符来进行分隔。这个也是可以实现的,只需要把命令中的#符号换成|符合即可。但是笔者还是建议用户采用#分隔符为好。因为|这个分隔符号根数字1很相像,很容易引起误读。所以笔者这里采用了#这个不容易误读的分隔符。另外利用paste命令来进行合并行的时候,只能够按固定的行数来分隔。如上面笔者连续使用了五个#分隔符和一个分行符号,就表示是连续把六行的内容合并在一起,然后插入一个分行符号。但是在买彩票的时候,可能一张彩票上只有三个号码。此时就需要在原始文件中插入一行空行。也就是说在彩票号码保存的时候,一张彩票必须要有六行的内容。如果刚好一张彩票买了五柱那是最好。如果不到五个号码的话,那么在文件保存的时候最好能够让程序补足剩余的行数。只有如此才能够利用paste命令来按一定的规律来合并行数。如上图所示,后面连续###就是因为文件中的空行所致。可见利用“paste ?s ?d “|||||\n” 文件名”这种方式来实现文件中行的合并要比使用vi命令简单的多。如果用户需要把这个结果保存在文件中的话,就可以利用重定向符号把其保存起来,以便后续查询或者打印操作等等。

Paste命令是Unix操作系统中功能很强的一个命令,特别是跟其他命令结合更能够实现一些非常复杂的功能。这也是Unix操作系统命令操作方式令人向往的地方。如可以把这个命令跟CUT命令结合。用CUT命令街区的内容可以通过paste命令粘贴到另一个位置,从而实现垂直方式的粘贴等等。这个功能在微软的Word文本中是无法实现的,只有在其Excel表格中才能够实现。而Unix操作系统中即使对于普通的文本文件,也可以实现类似Excel的表格操作。

可见,paste命令可以把两个以上的文件按一定的规则合并起来。如现在有两个记事本文件,一个文件存储着学生的学号、姓名;另一个文件存储着学生的学号、总成绩、年级排名等等。两个文件是学号是一一对应的,并且按照一定的顺序排列。现在需要把两个文件进行合并,变为包含学号、姓名、总成绩、年级排序的内容。也就是说要把第一个文件中的学生名字加入到第二个文件中。如果在微软操作系统下,在其记事本工具中是无法实现这个何合并的。而是需要先利用EXCLE表格工具把这两个文件打开,然后再把学生名字复制到另外一张表格中去。如果没有Excle等表格处理工具,那么就无法实现这个需求。但是在Unix操作系统中,则只需要凭借简单地cut命令与paste命令结合就可以把学生姓名内容复制到另外一个文件中。所以说,paste命令与find命令一样,是一个令人称奇的命令。另外值得一提的就是,paste命令不仅可以用来实现文件与文件的合并,还可以把终端输出的内容与存在的物理文件尽心合并。这里由于篇幅限制对这方面的内容就不做过多展开了。以后如果有机会的话,笔者会对会详细介绍如何利用paste命令来实现标准输入与物理文件的结合。若有这方面的需要请请大家关注笔者后续的文章。

怎么把好几行弄成一行_将多行内容合并成一行的两种方式相关推荐

  1. mysql不停止重启服务器_不停止MySQL服务增加从库的两种方式

    现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库.前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作. ...

  2. mysql 停从库_不停止 MySQL 服务增加从库的两种方式

    现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库.前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作. ...

  3. java 深拷贝 流_(转)Java技巧:深拷贝的两种方式

    ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵深复制(深克隆) 被复制 ...

  4. mysql增加从库_不停止MySQL服务增加从库的两种方式 (装载)

    现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库.前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作. ...

  5. java 不重启部署_编译Java类后不重启Tomcat有两种方式:热部署、热加载

    不重启Tomcat有两种方式:热部署.热加载 热部署:容器状况在运行时重新部署整个项目.这类环境下一般整个内存会清空,重新加载,这类方式 有可能会造成sessin丢失等环境.tomcat 6确实可以热 ...

  6. python repair修复功能_详解Python修复遥感影像条带的两种方式

    GDAL修复Landsat ETM+影像条带 Landsat7 ETM+卫星影像由于卫星传感器故障,导致此后获取的影像出现了条带.如下图所示, 影像中均匀的布满条带. 使用GDAL修复影像条带的代码如 ...

  7. Linux中vim编辑文件显示行号(临时和永久两种方式)

    一.前言   在Linux中经常使用vim编辑器去修改文件,默认是不显示行号的,那如何显示呢?有临时和永久两种方式.     本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错, ...

  8. 多行并一行显示的两种方式(DB2)

    2019独角兽企业重金招聘Python工程师标准>>> 一.简介 多行并作一行显示,在此介绍两种方式CTE递归,和XML函数.表数据如下: ID NAME  HOUSE 1 张三 普 ...

  9. php 两行数据合并,excel两行内容合并成一行的方法

    excel两行内容合并成一行的方法 打开你需要处理的excel文件,比如我需要的是A列和B列合并. 选择C列第一行(C1),输入"="号,再点击需要合并列的第一个单元格A1,这时可 ...

最新文章

  1. PostgreSQL — 外键关联操作
  2. 调用face++平台api进行人脸识别
  3. 爱的世界很拥挤,写在读《爱,就这么简单》之后
  4. wordpress改变ip或域名
  5. JSP 之输出九九乘法表
  6. python 列表的推导器和内置函数
  7. Oracle PL/SQL之LOOP循环控制语句
  8. 常用的loss函数,以及在训练中的使用
  9. SpringMVC 全局异常处理的简单应用
  10. 最美旗舰机型又将易主?三星Galaxy S11高清渲染图曝光
  11. Asp.net夜话之一:asp.net介绍
  12. ASP.NET MVC Razor视图引擎
  13. iOS--AppIcon和启动图片LaunchImage
  14. 【水果识别】基于matlab GUI自助水果超市【含Matlab源码 594期】
  15. 汇编:call和jmp
  16. python绘制折线图和散点图
  17. html布局源代码实例,网页实际案例-从设计到代码实现全过程(一)
  18. 浅析互联网行业套路玩法+攻略
  19. matlab 双层规划求解,双层规划模型的遗传算法求解的Matlab源码
  20. 从中国到全球,微软携手合作伙伴布局生态战略新主张

热门文章

  1. python 读取txt文件中满足要求的行写到新文件中_python_文本文件里面随机抽取若干行,写入新的文本文件里面...
  2. 内存DDR4和DDR5的区别
  3. 弄懂这56个Python使用技巧,掌握Python高效开发
  4. 【上海交大oj】畅畅的牙签袋(改)(枚举+模拟)
  5. Unity的UGUI使用Text和Image实现文字下划线
  6. 程序人生—谈安全测试的重要性
  7. python输入三个值输出最大值_python输入十个数如何输出最大值
  8. 1088: 手机短号 (多实例) ZZULIOJ
  9. 还在用邀请码邀请注册吗?落后咯!!!我家APP自带邀请码的
  10. Leetcode-数据结构-350. 两个数组的交集 II