微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何计算Makefile中的范围

这里是我的Makefile和输出,如何打印[1-5,7,9-10] ?

$ ls /tmp/foo foo10.txt foo1.txt foo2.txt foo3.txt foo4.txt foo5.txt foo7.txt foo9.txt $ cat Makefile DIR1 := /tmp/foo/ COMMA :=,EMPTY := SPACE := $(EMPTY) $(EMPTY) VERSIONS := $(subst $(SPACE),$(COMMA),$(patsubst foo%,%,$(basename $(notdir $(wildcard $(DIR1)/foo*.txt))))) all: $(info versions is [${VERSIONS}]) $ make versions is [10,1,2,3,4,5,9]

每个GNU / Linux发行版都有Python吗?

Linux:阻塞,直到一个文件中匹配的string(“tail + grep with blocking”)

如何解释ldd程序的输出

我将使用哪种GNU / Linux命令行工具来执行search和replace文件

处理跨平台的文件path

下面是shell命令的流水线来完成你的工作:

printf '%sn' foo*[0-9].txt | sed 's/[^0-9]*//g' | sort -n | awk 'function prnt(sep){printf "%s%s",s,(p > s ? "-" p : "") sep} NR==1{s = $1} p < $1-1{prnt(","); s = $1} {p = $1} END{prnt(ORS)}' 1-5,9-10

命令是:

printf在不同的行上打印每个文件

sed删除除数字以外的所有内容

按数字顺序排序以获得正确的顺序

awk设置范围并格式化结果

有几种方法

如果你知道最大的可能值:首先,添加SHELL=bash使大括号起作用。 然后使用类似$(shell {1..10}) ,并通过$(wildcard)传递结果来排除不存在的文件

通过sort -n管道,再次在$(shell) 。

填充数字在左边0秒,然后正常排序。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐