所以我有一个数据文件,其中有这样的行:
class subject
1-2 x
3 y
4-5 a我需要提取类列中给出的范围,并按照范围所述的次数在subject中打印文本。我应该得到这样的东西
class subject
1 x
2 x
3 y
4 a
5 a发布于 2020-12-02 11:08:45
使用awk:
awk '{ if ( split($1, range,"-")>1 ){
for(i=range[1]; i<=range[2]; i++) { print i, $2; };
next;
};
}1' infilesplit()关于-字符的第一列,并使用第一和第二索引作为循环中范围的开始和结束,每次在范围内以增量方式打印同一行,然后读取next行并执行相同的操作;如果没有范围,则输出行为awk默认打印操作1。
如果除了dash for range之外还有其他字符,您也可以修改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 zhttps://unix.stackexchange.com/questions/622513
复制相似问题