我正在尝试根据匹配输出新文件。在var arr = [
{"id": 1, "firstName": "Macko","parentId": 12},
{"id": 2, "firstName": "Jess","parentId": 1},
{"id": 3, "firstName": "Peter","parentId": 1},
{"id": 4, "firstName": "Lisa", "parentId": 1},
{"id": 5, "firstName": "Megan","parentId": 1},
{"id": 6, "firstName": "John", "parentId": 4},
{"id": 7, "firstName": "Joe", "parentId": 4},
{"id": 8, "firstName": "Matthew","parentId": 2},
{"id": 9, "firstName": "Peter","parentId": 2},
{"id": 10, "firstName": "Dio","parentId": 5},
{"id": 11, "firstName": "Hello","parentId": 5},
{"id": 12, "firstName": "Ana", "parentId": 4}
];
var getNestedChildren = function(arr, id, checked) {
var out = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i].parentId === id && checked.indexOf(arr[i].id) === -1) {
checked.push(id);
var children = getNestedChildren(arr, arr[i].id, checked);
if (children.length) {
arr[i].children = children;
}
out.push(arr[i]);
}
}
return out;
};
console.log(getNestedChildren(arr, 12, []));
文件中,有一个ID列表,它们会匹配input
文件中的$5
。如果两个ID匹配,那么文件中的整行就是新文件的一部分。如果没有找到匹配,则跳过它并继续前进。下面的|
会运行,但生成的awk
文件为空。谢谢你:)。
输入
new
文件
DACH1
POLE2
GNG7
所需的输出
chr13 60737711 60737910 chr13:60737711-60737910 DIAPH3-673|gc=69.3
chr13 72337884 72338003 chr13:72337884-72338003 DACH1-674|gc=30.3
chr19 2591538 2591657 chr19:2591538-2591657 GNG7-183|gc=48.7
AWK
chr13 72337884 72338003 chr13:72337884-72338003 DACH1-674|gc=30.3
chr19 2591538 2591657 chr19:2591538-2591657 GNG7-183|gc=48.7
答案 0 :(得分:2)
改用grep。
grep -w -f inputfile filetomodify > newfile
从我可以看到你只想输出文件中输入文件中有匹配条目的行。这就是grep的世界:) -f告诉它使用一个文件作为输入模式,输入文件中的每一行都是一个模式。
注意:如果你得到的东西比如GNG77-123(因为它从GNG7开始)或AGNG7-123(因为它有GNG7),请使用-w选项(全字匹配)。
答案 1 :(得分:2)
$ awk 'NR==FNR{a[$1];next} {k=$NF; sub(/-.*/,"",k)} k in a' input file
chr13 72337884 72338003 chr13:72337884-72338003 DACH1-674|gc=30.3
chr19 2591538 2591657 chr19:2591538-2591657 GNG7-183|gc=48.7