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,作者是宋桓公.
随机推荐
- TensorRT 7.2.1开发初步
TensorRT 7.2.1开发初步 TensorRT 7.2.1开发人员指南演示了如何使用C ++和Python API来实现最常见的深度学习层.它显示了如何采用深度学习框架构建现有模型,并使用该模 ...
- TinyML设备设计的Arm内核
TinyML设备设计的Arm内核 Arm cores designed for TinyML devices Arm推出了两个新的IP核,旨在为终端设备.物联网设备和其低功耗.成本敏感的应用程序提供机 ...
- C++标准模板库(STL)——map常见用法详解
map的定义 map<typename1, typename2> mp; map需要确定映射前类型和映射后类型,所以需要在<>内填写两个类型,第一个是键的类型,第二个是值的类型 ...
- Qt中的布局浅析与弹簧的使用,以及Qt居中的两种方法
1. 布局 为什么要布局: 布局之后窗口的排列是有序的 布局之后窗口的大小发生变化, 控件的大小也会对应变化 如果不对控件布局, 窗口显示出来之后有些控件的看不到的 布局是可以嵌套使用 常用的布局方式 ...
- Centos 安装 Influxdb + Chronograf
安装 Influxdb 1:下载安装包 官网下载地址 https://portal.influxdata.com/downloads/# wget https://dl.influxdata.com ...
- 【NX二次开发】点到矢量或直线的垂点
已知p1.p2.v1求p0 求解: 通过P1点和P2点,先求出v2: 使用 UF_VEC3_dot(),v1点乘v2得到P0与P2之间的距离: 使用UF_VEC3_unitize()将v1单位化: p ...
- 【NX二次开发】NX内部函数,查找内部函数的方法
[NX二次开发]NX内部函数,libufunx.dll文件中的内部函数 [NX二次开发]NX内部函数,libugui.dll文件中的内部函数 [NX二次开发]NX内部函数,libuifw.dll文件中 ...
- 关于Maven repository中pom.xml的jar包依赖
https://mvnrepository.com 该mvn网站可以找到个个版本的依赖jar包 http://doc.canglaoshi.org 该网站为达内的开发文档服务器,可以找到很多开发中需 ...
- NOIP模拟测试10「大佬·辣鸡·模板」
大佬 显然假期望 我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$ 然后一想不对得容 ...
- 精通LED驱动芯片HT1632C指令与编程应用
HT1632C是一款很常用的LED(数码管或点阵)驱动芯片,虽然官方已经宣布该芯片明年(2021年)即将寿终正寝(停产),但是相同厂家生产的同系列芯片的控制方式通常是相同的(事实上,大多数LED驱动芯 ...