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

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

所以我有一个数据文件,其中包含如下行:

class subject
1-2   x
3     y
4-5   a

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

class subject
1     x
2     x
3     y
4     a
5     a

答案1

使用awk

awk '{ if ( split($1, range,"-")>1 ){
           for(i=range[1]; i<=range[2]; i++) { print i, $2; };
           next;
       };
     }1' infile

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

如果除了破折号之外还有其他字符表示范围,您可以修改split()函数的第三个参数来提及它,例如:

split($1, range, /-|,|\.\./)

处理-,,..作为范围字符。

输入示例(制表符分隔):

class   subject
1,2     x
3       y
4-5     a
3..6    z

输出经过修改split()以识别-,,..作为范围分隔符:

class  subject
1      x
2      x
3      y
4      a
5      a
3      z
4      z
5      z
6      z

相关内容