利用shell中awk和xargs以及sed将多行多列文本中某一列合并成一行
一、问题描述
最近需要利用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将多行多列文本中某一列合并成一行的更多相关文章
- mysql去重, 把url重复且区为空的中去掉、统计重复数据、、结果集去重合并成一行
delete from 表名 where id not in (select d.id from (SELECT id FROM 表名 GROUP BY c1,c2,c3,c4)as d) #去重复, ...
- 如何利用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 ...
- Linux中awk抽取包含某字段的整行日志
命令示例:awk '{if($0~"listAuths") print}' xxx.log 解释说明:抽取xxx.log整个日志文件中,包含“listAuths”的行,打印输出
- 把文件每隔三行合并成一行(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 ...
- 【转载】vim 中如何替换选中行或指定几行内的文本
https://segmentfault.com/q/1010000002552573/a-1020000002552589 :'<,'>s/替换项/替换为/g 以下命令将文中所有的字符串 ...
- SQLServer 中多行数据合并成一行数据(一个字段)
需求:有四行数据,如下: 1.苹果 2.橘子 3.桃子 4.波罗 合并成一个字段:苹果,橘子,桃子,波罗: 需求明确之后,先弄点测试数据,上代码: --创建一个临时表 Create table #te ...
- TSQL--按某字段列分组,在将各组中某列合并成一行
鉴于群里很多同事在问这个问题,我简单写个Demo,希望对初学者有帮助! 无真相,无解说,不解释,直接上Code! --========================================= ...
- Python中将变量按行写入txt文本中
案例一: 讲数组a 循环写入名称为2.txt的文档中 # -*-coding:utf8-*- import requests from lxml import etree a=[1,2,3,4,5,6 ...
- mysql中的多行查询结果合并成一个
SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 ...
- 利用Oracle分析函数row_number和sys_connect_by_path实现多行数据合并为一行
emo场景,以oracle自带库中的表emp为例: select ename,deptno from emp order by deptno; ENAME DEPTNO CLARK 10 KING 1 ...
随机推荐
- 可视化U-Net编码器每层的输出(在已经训练好的模型下展示,并不是初始训练阶段展示)
想看一下对于一个训练好的模型,其每一层编码阶段的可视化输出是什么样子的.我以3Dircabd肝脏血管分割为例,训练好了一个U-Net模型.然后使用该模型在推理阶段使用,并可视化了每一层编码器. 分割结 ...
- 数据库运维实操优质文章分享(含Oracle、MySQL等) | 2023年5月刊
本文为大家整理了墨天轮数据社区2023年5月发布的优质技术文章,主题涵盖Oracle.MySQL.PostgreSQL等数据库的安装配置.故障处理.性能优化等日常实践操作,以及常用脚本.注意事项等总结 ...
- Vue 的最大优势是???
Vue 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合.另一方面,当与现代 ...
- 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: ...
- 4收4发ARINC429模块
USB 2.0 Hi-Speed (480Mbits /s)* 发送通道:每路发送通道FIFO大小为511 x 32bit(CHR32904) 缓存256条发送消息(CHR32904-EX)发送FI ...
- Required request parameter ‘xxx‘ for method parameter type xxxx is not present 解决方式
我在controller层传实体参数时加了@RequestParam,结果报Required request parameter 'pointlist' for method parameter ty ...
- JS 绘制 Cardinal 样条曲线
Cardinal 曲线 根据定义,给定点集 \(\{ \mathbf {P}_{k-1}, \mathbf {P}_k, \mathbf {P}_{k+1}, \mathbf {P}_{k+2} \} ...
- AI绘画漫谈——从AI网页生成说起
1. 又说"前端已死" 为什么说"又"呢?因为前两年我在一些博客网站三天两头就能看到这个标题,虽然今年好像换话题了,但感觉前端每年都要死个七八次,当然这里面还是 ...
- 『玩转Streamlit』--登录认证机制
如果你的Streamlit App中使用的数据的比较敏感,那么,保护这个App及其背后的数据免受未授权访问变得至关重要. 无论是出于商业机密的保护.用户隐私的维护,还是为了满足日益严格的合规要求,确保 ...
- C++ 函数模板与类模板
目录 16.1.1 函数模板 16.1.2 类模板 定义类模板 实例化模板 在类外定义成员函数 类模板成员函数的实例化 类模板和友元 模板类型别名 类模板参数的static成员 16.1.3 模板参数 ...