gpt4 book ai didi

node.js - 使用 sed 和 node.js 对文件的列进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:36 25 4
gpt4 key购买 nike

我有一个大文件,用制表符或逗号作为分隔符分隔。我想以任何特定的顺序动态地重新排列该文件的列。我尝试过 sed 命令。它在命令行上运行良好,但尝试使用 Node 执行时,它不起作用。

命令行中使用的命令:(对于制表符分隔的文件)按 3,1,2 顺序对列进行排序

sed -i -e 's@\(.*\)\t\(.*\)\t\(.*\)@\3\t\1\t\2@g' file_tab_header.txt

sed -i -e 's/\(.*\)\t\(.*\)\t\(.*\)/\3\t\1\t\2/' file_tab_header.txt

上面的命令在命令行上运行良好。

<小时/>

示例 Node js 代码:-

var exec = require('child_process').exec;

var command = "sed -i -e 's@\(.*\)\\t\(.*\)\\t\(.*\)@\3\\t\1\\t\2@g' file_tab_header.txt";

var command = "sed -i -e 's/\(.*\)\\t\(.*\)\\t\(.*\)/\3\\t\1\\t\2/' file_tab_header.txt";

child = exec(

command, function (error, stdout, stderr) {});

我尝试了很多变体,但它们都不能与 exec 一起使用。非常感谢任何帮助。

谢谢enter image description here

最佳答案

您可以考虑使用这样的脚本:

var fs = require('fs'),
file = './test.txt',
//order = [2, 1, 0],
separator = ' ';

function parse_line(lines, order, separator, callback, i, output) {
if(!i) {i = 0;}
if(!output) {output = '';}
console.log('line: ' + lines[i]);
var line,
j = 0,
o = [],
s = '';

if (i < lines.length) {
line = lines[i].split(separator);
while (j < line.length) {
o[order[j]] = line[j].trim();
j = j + 1;
}
s = o.join(separator);
console.log('+> ' + s);
output = output + s + '\n';
parse_line(lines, order, separator, callback, i + 1, output);
} else {
callback(output);
}
}

function parse_file(file, order, separator, callback) {
fs.readFile(file, function (err, data) {
if(err) {
console.log(err);
callback(null);
} else {
data = '' + data;

lines = String(data).split('\n');
parse_line(lines, order, separator, function (output) {
callback(output);
});
}
});
}

function get_order(callback) {
var i = 2,
order = [];
while (i < process.argv.length) {
order.push(parseInt(process.argv[i]));
i = i + 1;
}
callback(order);
}

get_order (function (order) {
parse_file(file, order, separator, function (output) {
console.log(output);
});
});

未经彻底测试,也不能解决 sed 的问题,但可以用作解决方法。

编辑:

测试文件:

1 2 3
4 5 6
7 8 9

结果:

E:\Documents\GIT\stackoverflow>node test.js 0 1 2
line: 1 2 3
+> 1 2 3
line: 4 5 6
+> 4 5 6
line: 7 8 9
+> 7 8 9
line: undefined
1 2 3
4 5 6
7 8 9


E:\Documents\GIT\stackoverflow>node test.js 1 2 0
line: 1 2 3
+> 3 1 2
line: 4 5 6
+> 6 4 5
line: 7 8 9
+> 9 7 8
line: undefined
3 1 2
6 4 5
9 7 8


E:\Documents\GIT\stackoverflow>node test.js 2 1 0
line: 1 2 3
+> 3 2 1
line: 4 5 6
+> 6 5 4
line: 7 8 9
+> 9 8 7
line: undefined
3 2 1
6 5 4
9 8 7


E:\Documents\GIT\stackoverflow>node test.js 0 2 1
line: 1 2 3
+> 1 3 2
line: 4 5 6
+> 4 6 5
line: 7 8 9
+> 7 9 8
line: undefined
1 3 2
4 6 5
7 9 8

关于node.js - 使用 sed 和 node.js 对文件的列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34987315/

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