绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
linux shell 将多行文件转换为一行
2019-09-06 15:04:40

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

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

      我给出了如下三种方法:

      1. 采用awk

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

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

      2. 采用sed

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

      说明:sed默认只按行处理,N可以让其读入下一行,再对\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年前刚刚工作的时候非常喜欢玩弄各种工具,拼凑完成运维的任务。和代码完成的功能一样,但却能顺手拈来,省掉了冗长的程序代码。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

DevOps与AIOPS
创建时间:2020-06-17 17:58:10
随着DevOps团队依赖于AIOps工具,管理层将需要利用一组新的技能,以大限度地利用AIOps能够提供的操作自动化类型。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 栈栈
    专家
戳我,来吐槽~