首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展每个数字和输出行的范围

扩展每个数字和输出行的范围
EN

Unix & Linux用户
提问于 2020-12-02 10:24:10
回答 1查看 271关注 0票数 0

所以我有一个数据文件,其中有这样的行:

代码语言:javascript
复制
class subject
1-2   x
3     y
4-5   a

我需要提取类列中给出的范围,并按照范围所述的次数在subject中打印文本。我应该得到这样的东西

代码语言:javascript
复制
class subject
1     x
2     x
3     y
4     a
5     a
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-12-02 11:08:45

使用awk

代码语言:javascript
复制
awk '{ if ( split($1, range,"-")>1 ){
           for(i=range[1]; i<=range[2]; i++) { print i, $2; };
           next;
       };
     }1' infile

split()关于-字符的第一列,并使用第一和第二索引作为循环中范围的开始和结束,每次在范围内以增量方式打印同一行,然后读取next行并执行相同的操作;如果没有范围,则输出行为awk默认打印操作1

如果除了dash for range之外还有其他字符,您也可以修改split()函数的第三个参数来说明这一点,例如:

代码语言:javascript
复制
split($1, range, /-|,|\.\./)

要将-,..用作范围字符,请执行以下操作。

示例输入(标签分隔):

代码语言:javascript
复制
class   subject
1,2     x
3       y
4-5     a
3..6    z

使用修改后的split()输出,将-,..识别为范围分隔符:

代码语言:javascript
复制
class  subject
1      x
2      x
3      y
4      a
5      a
3      z
4      z
5      z
6      z
票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/622513

复制
相关文章

相似问题

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