Awk

有效地將範圍列表映射到文件中的值列表

  • October 9, 2020

我有值寫入範圍的文件,我需要將它們“取消映射”到普通列表,如何有效地實現這一點?

例子:

141540000,141569999,1
147280000,147289999,0

第一列是范圍起始值,第二列是范圍結束,第三列是與範圍中每個數字對應的一些數據。

我想要實現的範例結果:

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

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

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

對於每一行,我們執行 for 循環並列印數字和最後一個欄位。

使用 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

引用自:https://unix.stackexchange.com/questions/613352