首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于长度的awk分离场

基于长度的awk分离场
EN

Stack Overflow用户
提问于 2018-06-27 14:43:13
回答 2查看 57关注 0票数 1

我有一个字段,其中包含类似于:

代码语言:javascript
复制
HEJ;DU;NORDEN;13322;90
ER;HER;NOGEN;334333;1

我希望输出一个文件,其中$4 (可以是5位数或6位数)被分割成两个独立的字段,这取决于长度(如果5拆分为3-2,如果拆分为3-3 )。

所以输出应该是

代码语言:javascript
复制
HEJ;FRA;NORDEN;133;22;90
ER;HER;NOGEN;334;333;1

有没有人对如何分开有好的建议?

我一直在玩awk和gsub,如果我只为字段这样做的话,它就能工作,但接下来的问题是让它与其他字段重新对齐,而我还没有意识到如何将gsub函数嵌入到只涉及一列数据的表达式中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-27 14:50:17

您可以使用substr函数。

代码语言:javascript
复制
first = substr($4,1,3)
second = substr($4,4)
$4 = $first ";" $second

您不需要有条件的,因为第一部分总是3位长。

票数 4
EN

Stack Overflow用户

发布于 2018-06-27 14:45:47

编辑:更简单的方法。

代码语言:javascript
复制
awk -F";" '{sub(/^.../,"&" OFS,$4)} 1' OFS=";"  Input_file

不检查像列的长度这样的条件是5或6,如果您想这样做,那么我们也可以在上面的代码中添加这些条件。

请你试着跟我说一下,如果这对你有帮助的话,请告诉我。

代码语言:javascript
复制
awk -F";" -v s1=";" '
{
  $4=length($4)==5?substr($4,1,3) s1 substr($4,4):length($4)==6?substr($4,1,4) s1 substr($4,5):$4
}
1' OFS=";"  Input_file
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51065675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档