如何使批处理文件从多个文本文件中选择最大值并追加到新文件

时间:2018-10-10 20:28:07

标签: batch-file

我们有一个激光测量系统(LiDAR),每次测量可生成10,000个文本文件。每个文件的格式都是一个包含4列的数组,其格式如下:

20     12     1.5     2.4
21     14     1.4     3.4
22     29     1.2     2.4
23     15     1.4     2.6

是否可以制作一个批处理文件,以提取第2列中具有最大值的行并将其插入新的文本文件中?即:

22     29     1.2     2.4

然后对剩余的9,999个文本文件执行此操作,并将行插入到同一文件中吗?还是这超出了DOS的范围?如果是这样,对有效的方法有什么建议吗?

2 个答案:

答案 0 :(得分:2)

假设DOS表示Windows批处理,
一些嵌套的for /f命令可以做到:

  • 1st将遍历文件%%F(假设按名称排序是所需的顺序)
  • 2nd逐行读取文件%%L
  • 3rd将默认定界符(空格)的行分为4个字段%%A-%%D

如果第二个字段大于先前的最大值,则用它的值替换,
并且当前行存储为MaxLine。
外部括号收集文件Lidar.Sum中的所有回显输出。

:: Q:\Test\2018\10\10\SO_52748307.cmd
@Echo off
setlocal EnableDelayedExpansion

( For /F "delims=" %%F in ('Dir /B/S/ON *.txt') do (
    Set Max=0
    For /f "usebackq delims=" %%L in ("%%F") do (
      For /f "tokens=1-4" %%A in ("%%L") do (
        If %%B Gtr !Max! (
          set "Max=%%B"
          set "MaxLine=%%L"
        )
      )
    )
    Echo !MaxLine!
  )
) > Lidar.Sum

答案 1 :(得分:2)

@echo off
setlocal EnableDelayedExpansion

(  rem Process all files
   for %%f in (*.txt) do (
      rem Get *the first line* from...
      rem Sort the file in reverse order by the 6th column = 2nd *data* column
      set "line="
      for /F "delims=" %%a in ('sort /R /+6 "%%f"') do (
         if not defined line (
            set "line=%%a"
            echo !line!
         )
      )
   )
) > output.dat