我们有一个激光测量系统(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的范围?如果是这样,对有效的方法有什么建议吗?
答案 0 :(得分:2)
假设DOS
表示Windows批处理,
一些嵌套的for /f命令可以做到:
%%F
(假设按名称排序是所需的顺序)%%L
%%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