You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Node.js脚本输出:生成指定结果文件与统计文件

批量文件搜索结果输出优化方案

以下是修改后的Node.js脚本,保留原有的Promise.all并行处理效率,同时实现你需要的两个输出需求:

const fs = require('fs').promises;
const readline = require('readline');

// 单个文件搜索函数:找到目标数字返回行号,未找到返回false
async function searchFile(filePath, targetNum) {
  const rl = readline.createInterface({
    input: fs.createReadStream(filePath),
    crlfDelay: Infinity
  });

  let lineNum = 0;
  for await (const line of rl) {
    lineNum++;
    // 字符串匹配目标数字,若需严格数字比较可转Number后判断
    if (line.includes(targetNum.toString())) {
      rl.close();
      return lineNum;
    }
  }
  return false;
}

async function main() {
  // 解析命令行参数:node script.js <目标数字> <文件1> <文件2> ... <输出yes/non文件> <输出数量文件>
  const args = process.argv.slice(2);
  if (args.length < 4) {
    console.error('用法:node script.js <目标数字> <文件列表> <输出标记文件> <输出计数文件>');
    process.exit(1);
  }

  const targetNum = parseInt(args[0]);
  const filePaths = args.slice(1, args.length - 2);
  const outputFlagsFile = args[args.length - 2];
  const outputCountFile = args[args.length - 1];

  // 并行处理所有文件搜索,保证效率
  const searchResults = await Promise.all(
    filePaths.map(filePath => searchFile(filePath, targetNum))
  );

  // 生成yes/non字符串(严格按文件传入顺序)
  const flagsStr = searchResults.map(result => result ? 'yes' : 'non').join(' ');
  // 统计找到目标的文件数量
  const matchCount = searchResults.filter(result => result).length;

  // 异步写入两个输出文件
  await Promise.all([
    fs.writeFile(outputFlagsFile, flagsStr),
    fs.writeFile(outputCountFile, matchCount.toString())
  ]);

  console.log('处理完成!');
}

main().catch(err => console.error('出错:', err));

关键细节说明

  • 并行效率保留:继续用Promise.all批量启动文件搜索任务,所有文件的IO操作并行执行,避免串行处理的效率损耗,和你原脚本的高效逻辑一致。
  • 逐行读取优化:用readline逐行读取文件,找到目标后立即终止当前文件的读取,无需加载整个文件到内存,适合处理大文件。
  • 参数解析逻辑:和PHP的$argv、Python的sys.argv逻辑类似,通过process.argv获取命令行传入的目标数字、文件列表和输出路径。
  • 结果处理:
    1. 遍历搜索结果数组,按顺序将“找到/未找到”转换为yes/non,用空格拼接成指定格式的字符串。
    2. 用filter快速统计结果中为true(即找到目标)的文件数量。
  • 异步写入:用Promise.all同时处理两个文件的写入操作,确保所有IO任务完成后才提示处理结束。

使用示例

假设脚本名为search.js,目标数字是123,要搜索的文件是a.txt、b.txt、c.txt,输出标记文件为flags.txt,计数文件为count.txt,运行命令:

node search.js 123 a.txt b.txt c.txt flags.txt count.txt

执行后:

  • flags.txt内容为类似yes non yes的字符串
  • count.txt内容为找到目标的文件数量(比如2)

内容的提问来源于stack exchange,提问作者user3152377

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:35:23