有效地将范围列表映射到文件中的值列表

有效地将范围列表映射到文件中的值列表

我的文件中包含按范围写入的值,我需要将它们“取消映射”到普通列表,如何有效实现这一点?

例子:

141540000,141569999,1
147280000,147289999,0

第一列是范围起始值,第二列是范围结束值,第三列是与范围中每个数字相对应的一些数据。

我想要实现的示例结果:

141540000, 1
141540001, 1
141540002, 1
... 
141569998, 1
141569999, 1
147280000, 0
147280001, 0
...
147289999, 0

我想最好的方法是使用 sed 或 awk 之类的东西,但我不知道如何解决。

答案1

awk -F, '{for (i=$1;i<=$2;i++) print i ", " $3}' file

对于每一行,我们执行 for 循环并打印数字和最后一个字段。

答案2

对于 Perl,使用范围运算符在列表上下文中:

perl -F, -ne 'print "$_, $F[2]" for ($F[0]..$F[1])' file

或者

perl -F, -ne 'print map { "$_, $F[2]" } ($F[0]..$F[1])' file

答案3

while IFS=, read -r start stop data <&3;do
  seq -f "%.0f, $data" "$start" "$stop"
done 3< file

seq命令将以 1 为步长从开始编号到停止编号循环显示,并一路打印消息。

  • 数据不包含任何格式特殊字符%或反斜杠序列。

相关内容