-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmerge-text.nf
89 lines (66 loc) · 1.52 KB
/
merge-text.nf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
include { mergeCsv ; mergeText } from 'plugin/nf-boost'
process RECORD_TO_CSV {
input:
val record
output:
tuple val(meta), path("record.${record.id}.txt")
exec:
def path = task.workDir.resolve("record.${record.id}.txt")
mergeCsv([ record ], path, header: true, sep: '\t')
meta = [id: record.id, type: record.type]
}
process ITEMS_TO_TXT {
publishDir 'results'
input:
val items
output:
path 'items.txt'
exec:
def path = task.workDir.resolve('items.txt')
mergeText(items, path, keepHeader: true)
}
process GROUPS_TO_TXT {
publishDir 'results'
input:
tuple val(group), val(items)
output:
path "items.${group}.txt"
exec:
def path = task.workDir.resolve("items.${group}.txt")
mergeText(items, path, keepHeader: true)
}
def makeRecord(int i) {
def id = String.format('%02d', i)
return [
id: id,
type: i % 2 == 0 ? 'even' : 'odd',
name: "record_${id}"
]
}
workflow MERGE_TEXT {
Channel.of( 1..10 )
| map { i -> makeRecord(i) }
| RECORD_TO_CSV
| map { meta, csv -> csv }
| collect
| ITEMS_TO_TXT
| view { txt -> txt.text }
}
workflow GROUP_SORT_MERGE_TEXT {
Channel.of( 1..10 )
| map { i -> makeRecord(i) }
| RECORD_TO_CSV
| map { meta, csv -> [meta.type, [meta, csv]] }
| groupTuple
| map { group, items ->
def sorted = items
.sort { item -> item[0].id }
.collect { meta, csv -> csv }
return [group, sorted]
}
| GROUPS_TO_TXT
| view { txt -> txt.text }
}
workflow {
MERGE_TEXT()
}