awk对某个字段分割处理
工作中遇到要根据文件中某个字段分割成多行文本的处理,想到用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|
awk对某个字段分割处理的更多相关文章
- awk之FIELDWIDTHS字段宽度
$ cat file 1234567890 $ awk -vFIELDWIDTHS="1 2 3 4 5" -vOFS="|" 'NF=NF' file 1|2 ...
- 文本替换sed+字段处理cut,join+awk重新编排字段
[1]sed工具(Stream Editor)--流编辑器 sed 本身也是一个管线(管道)命令,可以分析 standard input 的啦! 而且 sed 还可以将数据进行取代.删除.新增.截取特 ...
- ArcGIS自定义工具箱-字段分割
ArcGIS自定义工具箱-字段分割 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:用指定分割符分割字段, 用例:湖南省长沙市=>湖南/长沙 数据源: 使 ...
- awk将某个字段按照分隔符分割之后统计次数
cat label_movie2|grep BBD252CC0A4FE7D10C990261D5CEACB5|awk -F "," '{for(i=2;i<NF;i++) p ...
- sed(查找替换) 与awk(提取字段)
通常: sed 处理列 awk处理行 比较方便 Sed是一个基本的查找替换程序 sed -i "s/^@//g" 文件 #原地操作原文件,进行替换 cat ...
- 3.3.4 使用 awk 重新编排字段
awk 本身所提供的功能完备,已经是一个很好用的程序语言了.以后会好好地介绍该语言的精髓.虽然 awk 能做的事很多,但它主要的设计是要在 Shell脚本中发挥所长:做一些简单的文本处理,例如取出字段 ...
- awk查找特定字段
在一行中,查找字段包含exe的: ###########awk.awk######## { for(i=1;i<NF;i++) { if($i ~ /exe/) { print $i } } } ...
- awk截取指定字段
#!/bin/bash #好多地方可以优化,先记录下,便于以后使用 dir="/logs/$1"file="/logs/$1/requests.log"if [ ...
- Python中的字段分割
很多时候我们要完成分词的任务,这篇文章讲的非常非常好.生动形象,原文是https://www.cnblogs.com/douzi2/p/5579651.html,作者是宋桓公.
随机推荐
- MindSpore模型精度调优实践
MindSpore模型精度调优实践 引论:在模型的开发过程中,精度达不到预期常常让人头疼.为了帮助用户解决模型调试调优的问题,为MindSpore量身定做了可视化调试调优组件:MindInsight. ...
- Velodyne VLP-16激光雷达数据分析
Velodyne VLP-16激光雷达数据分析 Velodyne VLP-16激光雷达保持了 Velodyne 在 LiDAR 中的突破性重要功能:实时收发数据.360 度全覆盖.3D 距离测量以及校 ...
- TensorRT 7.2.1开发初步
TensorRT 7.2.1开发初步 TensorRT 7.2.1开发人员指南演示了如何使用C ++和Python API来实现最常见的深度学习层.它显示了如何采用深度学习框架构建现有模型,并使用该模 ...
- 打造住院新体验,GVS智慧病房有何独到之处?
3月26-28日,由广东省医院协会主办的"2021第二届广东省医院建设大会暨医院建筑与装备展览会"在广州琶洲国际采购中心盛大举办,来自全国各地的医院代表及企事业单位代表4000余人 ...
- postman实现参数化执行及断言处理
一.假设需要做的测试的参数如下: 注意保存为.csv文件时一定要选择格式为UTF-8 ,避免乱码. 二.输入参数和期望结果在postman中的用法: 注意一定要通过runner的方式进行运行,选择对应 ...
- springboot异常错误处理
1.在有模板引擎的情况下: springboot会默认找 templates/error/错误状态码.html,所以我们要定制化错误页面就可以到templates/error下创建一个[对应错误状态码 ...
- 【NX二次开发】Block UI 指定坐标系
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- Dynamic Anchor Learning for Arbitrary-Oriented Object Detection(DAL)
面向任意目标检测的动态锚点学习 摘要:面向任意的目标广泛地出现在自然场景.航空照片.遥感图像等中,因此面向任意的目标检测得到了广泛的关注.目前许多旋转探测器使用大量不同方向的锚点来实现与地面真实框的空 ...
- 【复习】Listening and Reading Comprehension
短对话 M: Why do you declare the news that you're pregnant on your blog directly? W: I'm so excited tha ...
- 【题解】将军令 Luogu P3942 (未完成)
历史/落在/赢家/之手 至少/我们/拥有/传说 谁说/败者/无法/不朽 拳头/只能/让人/低头 念头/却能/让人/抬头 抬头/去看/去爱/去追 你心中的梦 将军令 题目描述 又想起了四月. 如果不是省 ...