工作中遇到要根据文件中某个字段分割成多行文本的处理,想到用awk处理,这里记录下:

问题:

原文件:假设一共2个字段,用“|”分割,其中第二个字段用“#”分割,但该字段中也有不含“#”的值和空值

要求:根据第二个字段,若含#,将这条数据根据#分割成多条数据,无#和无值的行不变

202143108500|#0_1000_VOICE#0_1000_VOICE#0_1000_VOICE#0_TRAFFIC#0_TRAFFIC#0_TRAFFIC
202121366359|#0_1000_VOICE#0_TRAFFIC
202143108500|#0_1000_VOICE#0_1000_VOICE#0_1000_VOICE#0_TRAFFIC#0_TRAFFIC#0_TRAFFIC
202121366359|#0_1000_VOICE#0_TRAFFIC
202113492312|W_GH_YYM
202132164529|

用awk解决:

1、将含“#”的一行变多行

awk -F "|"  -vOFS="|"  '{l=split($2,arr,"#");for(i=1;i<l;i++){$2=arr[i+1];print}}' ./test.txt

结果:

202143108500|0_1000_VOICE
202143108500|0_1000_VOICE
202143108500|0_1000_VOICE
202143108500|0_TRAFFIC
202143108500|0_TRAFFIC
202143108500|0_TRAFFIC
202121366359|0_1000_VOICE
202121366359|0_TRAFFIC
202143108500|0_1000_VOICE
202143108500|0_1000_VOICE
202143108500|0_1000_VOICE
202143108500|0_TRAFFIC
202143108500|0_TRAFFIC
202143108500|0_TRAFFIC
202121366359|0_1000_VOICE
202121366359|0_TRAFFIC

2、将不含“#”筛选出来

awk -F "|"  '$2!~/#/{print}' ./test.txt

结果:

202113492312|W_GH_YYM
202132164529|

经过上面两步就可以解决,将结果生成新的文件 a.txt

awk -F "|"  -vOFS="|"  '{l=split($2,arr,"#");for(i=1;i<l;i++){$2=arr[i+1];print}}' ./test.txt >a.txt
awk -F "|"  '$2!~/#/{print}' ./test.txt >>a.txt

a.txt:

202143108500|0_1000_VOICE
202143108500|0_1000_VOICE
202143108500|0_1000_VOICE
202143108500|0_TRAFFIC
202143108500|0_TRAFFIC
202143108500|0_TRAFFIC
202121366359|0_1000_VOICE
202121366359|0_TRAFFIC
202143108500|0_1000_VOICE
202143108500|0_1000_VOICE
202143108500|0_1000_VOICE
202143108500|0_TRAFFIC
202143108500|0_TRAFFIC
202143108500|0_TRAFFIC
202121366359|0_1000_VOICE
202121366359|0_TRAFFIC
202113492312|W_GH_YYM
202132164529|

转载于:https://www.cnblogs.com/jnba/p/10641991.html

awk对某个字段分割处理相关推荐

  1. 文本替换sed+字段处理cut,join+awk重新编排字段

    [1]sed工具(Stream Editor)--流编辑器 sed 本身也是一个管线(管道)命令,可以分析 standard input 的啦! 而且 sed 还可以将数据进行取代.删除.新增.截取特 ...

  2. ArcGIS模型构建器批量将多个图层根据字段分割

    01 前言 昨日有网友提了一个需求:自己有一个省或者全国的很多个POI图层,包括很多类别(政府机构.医疗服务.文体娱乐设施等),自己想要将每个类别的图层根据字段分割成每个地级市. (我这里选了医疗保健 ...

  3. windows bat系列4:for处理案例一 逐行处理字段分割

    背景 假设有文件内容如下,其以列表形式显示了不同文件夹中文件数量,要求提取清单列中最后一列的数字. CHECK IS THERE ANY INTERFACE FILES IN I/O DIRS --- ...

  4. sed查找文件包含字段_sed(查找替换) 与awk(提取字段)

    通常: sed 处理列  awk处理行 比较方便 Sed是一个基本的查找替换程序     sed -i   "s/^@//g"     文件  #原地操作原文件,进行替换 cat ...

  5. awk和cut分割字符区别

    awk默认以空格为分割域,比如我想获得某进程pid: [root@SHCTC-GAME12-44 ~]# ps -ef|grep "sshd -f"|grep -v grep ro ...

  6. shell --- awk规范 系统总结

    文章目录 awk和sed的区别 awk脚本的流程控制 awk 记录和字段 字段的引用 awk表达式 赋值操作符 算数操作符 系统变量(awk本身自定义的系统变量) 关系操作符 布尔操作符 awk 条件 ...

  7. linux学习-awk工具

    awk是基于列的文本处理工具,它的工作方式是按行读取文本并视为一条记录,每条记录以字段分割成若干字段,然后输出个字段的值,事实上,awk是一种编程语言.awk认为文件都是结构化的,也就是说由单词和各种 ...

  8. AWK神器,继续案例

    例子一:打印文件N到N+M行 -F :允许awk更改其字段分隔符 -v :var=val把val值赋值给var如果有多个变量要赋值,那么就写多个-v,每个变量赋值对应一个-v cat txt 1.02 ...

  9. awk是什么?awk工作原理是什么?怎么用awk?

    一.awk介绍  1. awk概述awk是一种==编程语言==,主要用于在linux/unix下对==文本和数据==进行处理,是linux/unix下的一个工具.数据可以来自标准输入.一个或多个文件, ...

最新文章

  1. JavaScript 基础,登录验证
  2. java reference详解_Java Reference详解
  3. 二级分类_免费获取2021年二级造价工程师考试大纲
  4. Shell脚本之sed的使用
  5. 批量提取视频文件信息(文件大小及时长)并统计
  6. 全球首发免费的MySql for Entity Framework Core
  7. python递归算法_python递归算法(上)
  8. 程序员如何淡定度过 2.14 情人节?
  9. diff测试与流量回放测试
  10. java:通过Calendar类正确计算两日期之间的间隔
  11. Onvif协议之服务端开发基本流程
  12. 地图编辑器怎样炼成的
  13. 串口 单片机 文件_DIY迷你单片机学习板
  14. 错误的SQL脚本,错误消息 4104
  15. 油溶性CdSe/ZnS量子点,以CdSe为核心,ZnS为壳层,表面由疏水配体包裹的核/壳型荧光纳米材料
  16. 不带搜索框,数据同步请求,产品按字母分组组件
  17. IBM云对象存储Cleversafe 大力拓展全新战场
  18. matlab在矿物加工中的应用,试述《矿物加工数学模型》在矿物加工中的作用
  19. Excel·VBA选中列一键计算小计总计
  20. 硅谷最有权势的人:孙正义和他的愿景帝国

热门文章

  1. LeetCode 17电话号码的字母组合(搜索)18四数之和
  2. Oracle中的序列 sequence 用法
  3. Gentoo 安装日记 14 (配置内核 :设备驱动)
  4. 深究AngularJS——下拉框(selected)
  5. java 画图覆盖_请教如何在java画图中不覆盖原来的画图???
  6. java_opts gc回收器_JVM之垃圾回收机制(GC)
  7. java 检查pos机状态_POS机故障大全及排查方法
  8. 判别两棵树是否相等 设计算法_从匈牙利算法到KM算法
  9. 重磅发布 | 30+ 阿里巴巴云原生「顶流」,给你一堂《云原生技术实践公开课》
  10. 正则表达式笔试题php,2017年初级PHP程序员笔试题