如何枚举通道中的文件以使用`collectFile`
How to enumerate files in channel to use `collectFile`
我正在尝试枚举频道中的文件以在使用之前重命名它们 collectFile
:
files.flatten().merge(Channel.fromList([1, 2, 3, 4])).collectFile(storeDir: "$SCRATCH/intermediate") {
item -> ["data${item[1]}.csv", item[0].text]
}
但是 latest 文档说通道的 merge
运算符已弃用,但没有指出应该使用的任何替代方法。我可以用什么代替 merge
?
由migration notes say to use the join operator代替。如果您的输入是列表,您可以执行以下操作:
def indexedChannel( items ) {
return Channel.from( items.withIndex() ).map { item, idx -> tuple( idx, item ) }
}
ch1 = indexedChannel( [ 15, 20, 21 ] )
ch2 = indexedChannel( [ 'a', 'b', 'c' ] )
ch3 = indexedChannel( [ 1, 2, 3 ] )
ch1
.join( ch2 )
.join( ch3 )
.view()
结果:
[0, 15, a, 1]
[1, 20, b, 2]
[2, 21, c, 3]
不过,两个通道的merging/joining就不用列举了。只需使用 map operator:
def c = 1
Channel
.fromPath( './data/*.txt' )
.map { tuple( it, c++ ) }
.collectFile(storeDir: "$SCRATCH/intermediate") { fn, count ->
["data${count}.csv", fn.text]
}
我正在尝试枚举频道中的文件以在使用之前重命名它们 collectFile
:
files.flatten().merge(Channel.fromList([1, 2, 3, 4])).collectFile(storeDir: "$SCRATCH/intermediate") {
item -> ["data${item[1]}.csv", item[0].text]
}
但是 latest 文档说通道的 merge
运算符已弃用,但没有指出应该使用的任何替代方法。我可以用什么代替 merge
?
由migration notes say to use the join operator代替。如果您的输入是列表,您可以执行以下操作:
def indexedChannel( items ) {
return Channel.from( items.withIndex() ).map { item, idx -> tuple( idx, item ) }
}
ch1 = indexedChannel( [ 15, 20, 21 ] )
ch2 = indexedChannel( [ 'a', 'b', 'c' ] )
ch3 = indexedChannel( [ 1, 2, 3 ] )
ch1
.join( ch2 )
.join( ch3 )
.view()
结果:
[0, 15, a, 1]
[1, 20, b, 2]
[2, 21, c, 3]
不过,两个通道的merging/joining就不用列举了。只需使用 map operator:
def c = 1
Channel
.fromPath( './data/*.txt' )
.map { tuple( it, c++ ) }
.collectFile(storeDir: "$SCRATCH/intermediate") { fn, count ->
["data${count}.csv", fn.text]
}