• linux shell 将多行文件转换为一行


    说实话,虽然对shell编程包括awk有所了解,但是对sed的多行与一行的处理还是不甚理解,在网上搜罗了一篇文章觉得还不错,记录一下:

    今天一个工程师问我,怎么将一个文件中的多行转换成一行。

          我给出了如下三种方法:

          1. 采用awk

          awk BEGIN{RS=EOF}'{gsub(/ /," ");print}' file

          说明:awk默认将记录分隔符(record separator即RS)设置为 ,此行代码将RS设置为EOF(文件结束),也就是把文件视为一个记录,然后通过gsub函数将 替换成空格,最后输出。

          2. 采用sed

          sed ':a ; N;s/ / / ; t a ; ' file

          说明:sed默认只按行处理,N可以让其读入下一行,再对 进行替换,这样就可以将两行并做一行。但是怎么将所有行并作一行呢?可以采用sed的跳转功能。:a 在代码开始处设置一个标记a,在代码执行到结尾处时利用跳转命令t a重新跳转到标号a处,重新执行代码,这样就可以递归的将所有行合并成一行。

          3. cat file | xargs

          说明:这可能是最简单的一种方式。

           This manual page documents the GNU version of xargs. xargs reads argu-
           ments from the standard input, delimited by blanks (which can be pro-
           tected with double or single quotes or a backslash) or newlines

          上面是man手册对xargs的说明。其实xargs就是对shell命令行参数限制做的一个扩展。

          这条命令的含义也很简单,将file中的内容作为参数传给X程序

          如果用echo作为X程序,则命令为:

          cat file | xargs echo

          此命令和cat file | xargs 行为一致,因为xargs的默认行为就是打印输出。

          unix的一些工具设计很巧妙,每一项工具仅专注于完成一个功能。往往组合起来就能实现很强大的功能。2年前刚刚工作的时候非常喜欢玩弄各种工具,拼凑完成运维的任务。和代码完成的功能一样,但却能顺手拈来,省掉了冗长的程序代码。

  • 相关阅读:
    Sql诊断之Explain
    Cenos7安装docker环境以及docker-compose
    uniapp苹果内购获取不到苹果的iap支付通道
    iOS云打包如何设置通用链接等Capabilities配置
    iOS应用id,套装id,appid,BundleID申请教程
    利用Appuploader在window上申请IOS开发所需要的证书及描述文件
    浅析GET和POST请求的本质区别以及关于get请求的长度限制到底是多少的问题
    iOS苹果开发者组织账号申请时的坑
    apache开源项目--HIVE
    [Unit testing Java] Unit testing Junit Controller
  • 原文地址:https://www.cnblogs.com/liujiacai/p/7885136.html
Copyright © 2020-2023  润新知