gpt4 book ai didi

linux - 如何从文件中添加/删除数字或数字范围并重新组织范围

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:42 27 4
gpt4 key购买 nike

如何从文件中添加/删除数字或数字范围并重新组织范围

例如在文件中

$ cat test.in
cn[01-10]
cn01
cn[01,02,07-09]
cn[01-02]

删除cn01和cn05的要求

期望的输出

$ cat test.in
cn[02-04,06-10]
cn[02,07-09]
cn[02]

最佳答案

以下是将您的列表和值范围扩展为单个值的方法:

$ cat tst.awk
function expand(exprStr,valsArr, i,terms,term,range,val,numVals) {
gsub(/cn|[][]/,"",exprStr)
delete valsArr
# exprStr = 01,02,07-09
split(exprStr,terms,/,/)
for (i=1; i in terms; i++) {
# terms[1]=01, [2]=02, [3]=07-09
term = terms[i]
split(term,range,/-/)
range[2] = (2 in range ? range[2] : range[1])
for (val=range[1]; val<=range[2]; val++) {
# range[1]=07, [2]=09
valsArr[++numVals] = sprintf("%02d",val)
}
}
}
{
print "--------", $0
expand($0,arr)
for (i=1; i<=length(arr); i++) {
print i, "cn"arr[i]
}
}

.

$ awk -f tst.awk file
-------- cn[01-10]
1 cn01
2 cn02
3 cn03
4 cn04
5 cn05
6 cn06
7 cn07
8 cn08
9 cn09
10 cn10
-------- cn01
1 cn01
-------- cn[01,02,07-09]
1 cn01
2 cn02
3 cn07
4 cn08
5 cn09
-------- cn[01-02]
1 cn01
2 cn02

现在只需从数组中删除不需要的值,然后执行相反的操作以重新组合为您的输入格式。

关于linux - 如何从文件中添加/删除数字或数字范围并重新组织范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46096751/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com