一、问题描述

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

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

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

二、解决方案

首先是提取每一行的第X列,我最先能够想到的是awk命令,如下:awk  '{print $2}' user1.txt

接着,是不是可以把替换符替换为逗号呢?

使用tr命令awk '{print $2}' user1.txt |tr "\n" ","

看着好像是很接近,我们将上面的 ,分隔改为","分隔,是不是就okey了呢?命令如下:awk '{print $2}' user1.txt |tr "\n" "\",\""

只是很遗憾,执行效果如下:

为什么呢?

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

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

先来个简单的,将换行替换成逗号,命令如下:awk '{print $2}' user1.txt |sed 's/\n/,/g'

执行结果如下:

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

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

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

解决方案一:

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

awk '{print $2}' user1.txt |xargs

#使用tr命令干掉换行符

awk '{print $2}' user1.txt |tr "\n" " "

使用sed命令将空格替换成",",命令如下:awk '{print $2}' user1.txt |xargs |sed 's/ /","/g'

但是开头和结尾少了一个双引号,解决方案如下:echo '"'`awk '{print $2}' user1.txt |xargs |sed 's/ /","/g'`'"'

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

linux awk 某一列合并,利用shell中awk和xargs以及sed将多行多列文本中某一列合并成一行...相关推荐

  1. linux遍历目录删除指定文件,利用shell脚本遍历文件夹内所有的文件并作整理统计的方法-linux删除文件夹...

    本篇文章扣丁学堂Linux培训小编给读者们分享一下利用shell脚本遍历文件夹内所有的文件并作整理统计的方法,文章具有很好的参考价值,感兴趣的小伙伴就随小编来了解一下吧. 环境: Ubuntu下采用s ...

  2. Linux从入门到精通系列之SHELL编程awk语法结构及案例解析

    前言 AWK 是一种非常强大的文本分析工具.适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行特殊技巧程序设计.对于短消息来说,比如处理话单文件,使用awk就非常方便. 一.awk介绍 1. ...

  3. Linux脚本输出99乘法表,利用shell脚本各种循环语句输出九九乘法表

    SHELL语句主要包含三种:for循环语句.while循环语句.unitl循环语句. 这里分别使用这三种循环或者结合使用来实现九九乘法表.详细如下: 使用for循环实现: #!/bin/bash #f ...

  4. linux最全的命令大全,shell运维手册

    1 文件{          ls -rtl                 # 按时间倒叙列出所有目录和文件 ll -rt     touch file              # 创建空白文件 ...

  5. shell脚本:删除文本中的字母、找单词、筛选,匹配,删除,替换

    shell 有时候会用三剑客结合正则表达式来处理文本  sed cut行  awk列,对一行中的英文,数字筛选,匹配,删除,替换, 文章目录 删除文本中指定行的字母 输出一句英文中长度小于6的单词 根 ...

  6. excel隐藏了列数和行数_快速隐藏Excel行和列

    excel隐藏了列数和行数 In some of my Excel workbooks there are calculation rows or columns that are required ...

  7. 【PhpSpreadsheet】实现excel冻结列和行(即左右滚动时指定列和行固定不动)

    composer require phpoffice/phpspreadsheet 版本:^1.18 在做表格数据导出时,如何冻结列和行(即左右滚动时冻结的列和行固定不动) 代码 $spreadshe ...

  8. linux awk 排序,利用Shell中awk和sort命令合并同类数据后并依据某一列进行排序

    待处理的数据格式如下: 为了便于统计分析,对数据进行如下处理: 当姓名相同的时候,将后面的值相加,最后依据后面值的大小进行排序. 思路:先使用awk对数据进行合并,然后使用sort对数据进行排序.aw ...

  9. 【Shell】awk命令--输出某列,列求和,列求平均值,列最大值,列去重复,取倒列,过滤行,匹配,不匹配,内置变量|定义分隔符|多个分隔符...

    目录 awk基本语法 awk输出某几列 awk遍历文件行处理 awk中运行shell命令 方法1:awk 内置函数system 方法2 通过awk  print 交给bash awk中运行shell命 ...

最新文章

  1. cookie和session 创建和验证 原始的servlet
  2. python爬虫获取的网页数据为什么要加[0-[Python爬虫] 等待网页加载后再获取内容...
  3. Add Two Numbers
  4. android java和c混合编程_C/C++在Java项目、Android和Objective-C三大平台下实现混合编程...
  5. C语言的math相关的函数
  6. flutter 动画json_Flutter 50: 图解动画小插曲之 Lottie 动画
  7. 探索Julia(part8)--循环语句和条件语句
  8. 什么时候觉得自己该离职了?
  9. git 无法提交空目录
  10. Android xml资源文件中@、@android:type、@*、?、@+含义和区别
  11. 【Scala】Scala中特殊函数的使用(代码)
  12. Linux htop工具使用详解
  13. MySQL学习4 数据过滤
  14. Mxnet框架学习笔记(一):常用数据操作方法学习记录
  15. python函数式编程模式_Python 函数式编程
  16. 平面一般力系最多可以求解_利用平面任意力系的平衡方程最多可求解几个未知量(  )。...
  17. 【halcon】菜鸡入门,白纸黑点
  18. Django(十二):django支付(微信支付宝)+项目部署(虚拟机、docker、云服务器)
  19. html仿写网易云音乐人页面,vue模仿网易云音乐的单页面应用
  20. 如何在局域网中查看其他电脑上的文件

热门文章

  1. mysql两个查询结果差集_【Mysql】求两个表(查询结果)的差集
  2. 【Java数据结构与算法】第十九章 贪心算法、Prim算法和Kruskal算法
  3. iBase4J部署总结¥
  4. redis压力测试工具-----redis-benchmark
  5. Prism 的 TabControl 导航
  6. java的实现内部类实现链表
  7. Force.com 多租户架构
  8. B - ACM小组的古怪象棋 【地图型BFS+特殊方向】
  9. 快速理解孤儿进程和僵尸进程
  10. sql server 事务与try catch