找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 42166|回复: 12

[文本处理] 【已解决】提取多个txt文本文件的第n行/指定行,合并到同一个新的文件里?

[复制链接]
发表于 2018-11-7 09:19:21 | 显示全部楼层 |阅读模式
本帖最后由 lxh623 于 2018-11-10 09:03 编辑

批处理怎样提取第n行,合并到一起?
当前目录下的文本文件,提取每一个txt的第n行,合并到result.txt 。
第二个,提取连续的几行,比如从第x行到第y行,合并到result.txt 。
谢谢!!
发表于 2018-11-7 09:35:25 | 显示全部楼层
本帖最后由 523066680 于 2018-11-7 09:50 编辑

Join( Get-All-Text-Map-Each-Of-Line-{n}, "\n" )-Save("result.txt")

来自超级强大的变形 PowerShell 语法。
PowerShell 是坠吼的

评分

参与人数 3技术 +3 收起 理由
lxh623 + 1 谢谢
happy886rr + 1 微父溺爱ps。 cmd已成弃婴
xczxczxcz + 1 靠,这种写法还第一次见。历害。

查看全部评分

发表于 2018-11-7 11:12:35 | 显示全部楼层
(gci ".\*.txt" )| %{(gc "$_" -totalcount n)[-1] | ac ".\result1.log"}

第二种
(gci ".\*.txt" )| %{(gc "$_" -totalcount y)[x..y] | ac ".\result2.log"}
发表于 2018-11-7 11:51:48 | 显示全部楼层
#perl 代码
use strict;

my  $start = shift;
my        $end   = shift;

for(glob('*.txt')){
        my $fh ;
        open ($fh , $_) or die "Open $_ failed\n";
        my @arr = <$fh>;       
        print for(@arr[$start -1 .. $end -1]);
        close($fh);
}
#结束. 把以上代码拷贝到个文件,p.pl      
#p.pl  1  8  表示取目录下所有txt文件的1---8行
#p.pl   1  8 >result.txt   把结果重定向到result.txt

评分

参与人数 1技术 +1 收起 理由
lxh623 + 1 谢谢1

查看全部评分

发表于 2018-11-7 12:36:53 | 显示全部楼层
回复 4# zuodx

    File::Slurp 很好用,可以让代码更简洁
发表于 2018-11-7 13:44:20 | 显示全部楼层
回复 2# 523066680


    这个命令要怎么用,WPS无法识别为CMDLET
发表于 2018-11-7 14:26:03 | 显示全部楼层
回复 6# yhcfsr


    滑稽脸表示开玩笑
发表于 2018-11-7 20:32:38 | 显示全部楼层
本帖最后由 WHY 于 2018-11-8 09:28 编辑

提取每个文本的第 5~15 行
设置 x,y 值相等时,比如 x=y=5 时,提取每个文本中的第 5 行
  1. @echo off & setlocal enabledelayedexpansion
  2. set /a x=5, y=15
  3. (for %%i in (*.txt) do (
  4.     (for /L %%j in (1 1 !y!) do (
  5.         set "s=" & set /p "s="
  6.         if %%j GEQ !x! echo;!s!
  7.     )) < "%%i"
  8. )) > Result.Log
  9. pause
复制代码

评分

参与人数 3PB +6 技术 +3 收起 理由
lxh623 + 1 谢谢!
523066680 + 6 + 1 高端玩家
happy886rr + 1 为啥还用这招!

查看全部评分

发表于 2018-11-7 20:37:36 | 显示全部楼层
本帖最后由 WHY 于 2018-11-9 13:56 编辑

提取每个文本的第 5~15 行
设置 x,y 值相等时,比如 x=5, y=5 时,提取每个文本中的第 5 行
  1. @if(0)==(0) echo off
  2. dir /b *.txt | cscript //nologo //e:jscript "%~f0" > 1.Log
  3. pause & goto :EOF
  4. @end

  5. var x = 5;      //开始行号
  6. var y = 15;     //结束行号
  7. var fso = new ActiveXObject('Scripting.FileSystemObject');
  8. while(!WSH.StdIn.AtEndOfStream){
  9.     var strFile = WSH.StdIn.ReadLine();
  10.     var objFile = fso.OpenTextFile(strFile, 1);
  11.     for(var i=1; i<=y; i++){
  12.         if(objFile.AtEndOfStream) break;
  13.         i<x ? objFile.skipLine() : WSH.Echo(objFile.ReadLine());
  14.     }
  15. }
复制代码

评分

参与人数 1技术 +1 收起 理由
lxh623 + 1 谢谢!

查看全部评分

发表于 2018-11-8 09:11:13 | 显示全部楼层
本帖最后由 523066680 于 2018-11-8 09:24 编辑

  • Strawberry Perl
    $n 是行号

      use File::Slurp;
      $n = 3;
      write_file( "result.log", map { (read_file($_))[$n-1] } glob "*.txt");


  • 又想了一下,cmd 配合 perl 命令行:

      (for %a in (*.txt) do @(perl -ne "print if $.==3" "%a")) > result.log.log

评分

参与人数 1技术 +1 收起 理由
lxh623 + 1 谢谢1

查看全部评分

发表于 2018-11-8 09:30:38 | 显示全部楼层
本帖最后由 523066680 于 2018-11-8 09:54 编辑

在必应搜索了一下`linux shell get nth line of text`

Getting n-th line of text output

这……
      sed -s -n '3p' *.txt

评分

参与人数 1技术 +1 收起 理由
lxh623 + 1 谢谢!

查看全部评分

发表于 2018-11-8 21:28:45 | 显示全部楼层
本帖最后由 happy886rr 于 2018-11-8 21:32 编辑

tl你值得拥有,下载地址http://bcn.bathome.net/tool/tl.exe
提取第n行到第m行
  1. tl *.txt -nn,m
复制代码
还能当tail用

评分

参与人数 1技术 +1 收起 理由
lxh623 + 1 谢谢!

查看全部评分

发表于 2018-11-8 21:40:14 | 显示全部楼层
第三行:
  1. sed -s -n "3p" *.txt
复制代码
第二行到第四行:
  1. sed -s -n "2,4p" *.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
lxh623 + 1 谢谢!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 01:04 , Processed in 0.024962 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表