开发者社区> 问答> 正文

linux shell将多行结果或者文件转换为一行

linux shell 将多行文件转换为一行
如下三种方法:

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-
ected 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\Linux的一些工具设计很巧妙,每一项工具仅专注于完成一个功能。往往组合起来就能实现很强大的功能。
各种工具,拼凑完成运维的任务,和代码完成的功能一样,但却能顺手拈来,省掉了冗长的程序代码。



展开
收起
hg_frankie 2016-10-27 15:31:56 7876 0
1 条回答
写回答
取消 提交回答
  • 一个程序员,欢迎骚扰!!!
    命令 改变一切
    2016-10-28 13:01:29
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载