一、问题描述
最近需要利用Shell将多行多列文本中某一列,通过指定的分隔符合并成一行。假设需要处理的文本如下:

我们主要处理的是,将用户名提取处理,合并成一行,并通过逗号进行分隔。最终的格式如下:

“li1”,”huan”,”wang”,”wu”,”78c”,”zh”,”liu”,”zhao”,”xu”,”yang”

二、解决方案
首先是提取每一行的第X列,我最先能够想到的是awk命令,如下

awk '{print $2}' user1.txt
1
2
效果如下:

接着,是不是可以把替换符替换为逗号呢?
使用tr命令

awk '{print $2}' user1.txt |tr "\n" ","
1
效果:

看着好像是很接近,我们将上面的 , 分隔改为”,”分隔,是不是就okey了呢?命令如下:

awk '{print $2}' user1.txt |tr "\n" "\",\""
1
只是很遗憾,执行效果如下:

为什么呢?

因为tr是单个字符处理工具,而不是字符串处理工具。

既然tr不可以替换字符串,那么咱们就用sed命令。因为sed命令不仅仅可以处理字符,还可以处理字符串。

先来个简单的,将换行替换成逗号,命令如下:

awk '{print $2}' user1.txt |sed 's/\n/,/g'
1
执行结果如下:

好吧,竟然不听话。为什么呢?

因为sed命令处理过程是:从文本流中读取一行文本后,先把换行符去掉,然后进行相应的命令,处理完后再添加上换行符。这就导致sed命令,无法对换行符进行直接替换。

既然这样行不通,怎么搞呢?

解决方案一:
既然sed不能修改换行符,那就是在使用sed之前,把换行符干掉。干掉换行符,可以使用tr和xargs命令。

#使用xargs命令干掉换行符
awk '{print $2}' user1.txt |xargs
#使用tr命令干掉换行符
awk '{print $2}' user1.txt |tr "\n" " "
1
2
3
4

使用sed命令将空格替换成”,”,命令如下:

awk '{print $2}' user1.txt |xargs |sed 's/ /","/g'
1

但是开头和结尾少了一个双引号,解决方案如下:

echo '"'`awk '{print $2}' user1.txt |xargs |sed 's/ /","/g'`'"'
1
2
解决方案二:
echo '"'`awk '{print $2}' user1.txt | sed ':label;N;s/\n/","/;b label'`'"'
1

更多内容,可以点击这里:http://www.findme.wang/blog/detail/id/310.html

利用shell中awk和xargs以及sed将多行多列文本中某一列合并成一行的更多相关文章

  1. mysql去重, 把url重复且区为空的中去掉、统计重复数据、、结果集去重合并成一行

    delete from 表名 where id not in (select d.id from (SELECT id FROM 表名 GROUP BY c1,c2,c3,c4)as d) #去重复, ...

  2. 如何利用shell或者awk二维数组实现9x9乘法表?

    第一种:利用shell for循环来实现. for i in `seq 1 9`do for j in `seq 1 9` do if [ $i -ge $j ] then echo -en &quo ...

  3. Linux中awk抽取包含某字段的整行日志

    命令示例:awk '{if($0~"listAuths") print}'   xxx.log 解释说明:抽取xxx.log整个日志文件中,包含“listAuths”的行,打印输出

  4. 把文件每隔三行合并成一行(awk之RS、ORS与FS、OFS)

    比如文本如下:123abc合并后的结果是:1 2 3a b c #.txt a b c awk之RS.ORS与FS.OFS 转自http://www.cnblogs.com/fhefh/archive ...

  5. 【转载】vim 中如何替换选中行或指定几行内的文本

    https://segmentfault.com/q/1010000002552573/a-1020000002552589 :'<,'>s/替换项/替换为/g 以下命令将文中所有的字符串 ...

  6. SQLServer 中多行数据合并成一行数据(一个字段)

    需求:有四行数据,如下: 1.苹果 2.橘子 3.桃子 4.波罗 合并成一个字段:苹果,橘子,桃子,波罗: 需求明确之后,先弄点测试数据,上代码: --创建一个临时表 Create table #te ...

  7. TSQL--按某字段列分组,在将各组中某列合并成一行

    鉴于群里很多同事在问这个问题,我简单写个Demo,希望对初学者有帮助! 无真相,无解说,不解释,直接上Code! --========================================= ...

  8. Python中将变量按行写入txt文本中

    案例一: 讲数组a 循环写入名称为2.txt的文档中 # -*-coding:utf8-*- import requests from lxml import etree a=[1,2,3,4,5,6 ...

  9. mysql中的多行查询结果合并成一个

    SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 ...

  10. 利用Oracle分析函数row_number和sys_connect_by_path实现多行数据合并为一行

    emo场景,以oracle自带库中的表emp为例: select ename,deptno from emp order by deptno; ENAME DEPTNO CLARK 10 KING 1 ...

随机推荐

  1. 可视化U-Net编码器每层的输出(在已经训练好的模型下展示,并不是初始训练阶段展示)

    想看一下对于一个训练好的模型,其每一层编码阶段的可视化输出是什么样子的.我以3Dircabd肝脏血管分割为例,训练好了一个U-Net模型.然后使用该模型在推理阶段使用,并可视化了每一层编码器. 分割结 ...

  2. 数据库运维实操优质文章分享(含Oracle、MySQL等) | 2023年5月刊

    本文为大家整理了墨天轮数据社区2023年5月发布的优质技术文章,主题涵盖Oracle.MySQL.PostgreSQL等数据库的安装配置.故障处理.性能优化等日常实践操作,以及常用脚本.注意事项等总结 ...

  3. Vue 的最大优势是???

    Vue 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合.另一方面,当与现代 ...

  4. How To Remove the Oracle OLAP API Objects From 9i and 11g Databases (Doc ID 278111.1)

    How to remove the Oracle OLAP API objects from a 9i database We can consider like olap api objects: ...

  5. 4收4发ARINC429模块

    USB 2.0 Hi-Speed (480Mbits /s)* 发送通道:每路发送通道FIFO大小为511 x 32bit(CHR32904)  缓存256条发送消息(CHR32904-EX)发送FI ...

  6. Required request parameter ‘xxx‘ for method parameter type xxxx is not present 解决方式

    我在controller层传实体参数时加了@RequestParam,结果报Required request parameter 'pointlist' for method parameter ty ...

  7. JS 绘制 Cardinal 样条曲线

    Cardinal 曲线 根据定义,给定点集 \(\{ \mathbf {P}_{k-1}, \mathbf {P}_k, \mathbf {P}_{k+1}, \mathbf {P}_{k+2} \} ...

  8. AI绘画漫谈——从AI网页生成说起

    1. 又说"前端已死" 为什么说"又"呢?因为前两年我在一些博客网站三天两头就能看到这个标题,虽然今年好像换话题了,但感觉前端每年都要死个七八次,当然这里面还是 ...

  9. 『玩转Streamlit』--登录认证机制

    如果你的Streamlit App中使用的数据的比较敏感,那么,保护这个App及其背后的数据免受未授权访问变得至关重要. 无论是出于商业机密的保护.用户隐私的维护,还是为了满足日益严格的合规要求,确保 ...

  10. C++ 函数模板与类模板

    目录 16.1.1 函数模板 16.1.2 类模板 定义类模板 实例化模板 在类外定义成员函数 类模板成员函数的实例化 类模板和友元 模板类型别名 类模板参数的static成员 16.1.3 模板参数 ...