[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 lxh623 于 2018-11-10 09:03 编辑

批处理怎样提取第n行,合并到一起?
当前目录下的文本文件,提取每一个txt的第n行,合并到result.txt 。
第二个,提取连续的几行,比如从第x行到第y行,合并到result.txt 。
谢谢!!

第三行:
  1. sed -s -n "3p" *.txt
复制代码
第二行到第四行:
  1. sed -s -n "2,4p" *.txt
复制代码
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 happy886rr 于 2018-11-8 21:32 编辑

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

评分人数

TOP

本帖最后由 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

评分人数

TOP

本帖最后由 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

评分人数

TOP

本帖最后由 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

评分人数

TOP

本帖最后由 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
复制代码
3

评分人数

TOP

回复 6# yhcfsr


    滑稽脸表示开玩笑

TOP

回复 2# 523066680


    这个命令要怎么用,WPS无法识别为CMDLET
QQ 33892006

TOP

回复 4# zuodx

    File::Slurp 很好用,可以让代码更简洁

TOP

#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

评分人数

TOP

(gci ".\*.txt" )| %{(gc "$_" -totalcount n)[-1] | ac ".\result1.log"}

第二种
(gci ".\*.txt" )| %{(gc "$_" -totalcount y)[x..y] | ac ".\result2.log"}

TOP

本帖最后由 523066680 于 2018-11-7 09:50 编辑

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

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

评分人数

    • lxh623: 谢谢技术 + 1
    • happy886rr: 微父溺爱ps。 cmd已成弃婴技术 + 1
    • xczxczxcz: 靠,这种写法还第一次见。历害。技术 + 1

TOP

返回列表