csv - 对 CSV 记录进行排序
问题描述
我正在尝试使用批处理脚本对特定列上的 csv 文件进行排序。
csv 文件有大约 22 列,L(10) 列包含邮政编码。有多个具有相同邮政编码的记录,我需要按数字升序对这些记录进行排序。
这是我到目前为止所做的,
for /F "tokens=1-22 delims=," %%a in (test.csv) do (
rem Define the sorting column in next line: %%a=1, %%b=2, etc...
set "line["%%l"]=%%d,%%f,%%l"
)
for /F "tokens=1* delims==" %%a in ('set line[') do echo %%b >> result2.txt
这是我的结果。它正在删除具有重复邮政编码的记录。我应该看到多行具有相同的邮政编码,但当然名称不同。
"John","Doe","12078"
"John","Doe3","12095"
"John","Doe5","12197"
OR %%f in (*csv) do ( SET CurrentFile=%%f SET /a NumLines=0
For /f %%j in ('Find "" /v /c ^< !CurrentFile!') Do (
Set /a NumLines=%%j
(set row=%~1) & (set last=%~1)
For /F "tokens=4-7 delims=," %%D in ('type !CurrentFile!') do (
if not defined row (set row=%%D %%F) else (set last=%%D %%F)
)
echo.
echo. Filename: !CurrentFile!
echo. Record Count: !NumLines!
echo. First Record Name:!row!
echo. Last Record Name: !last!
) >> Result.txt
) 本地化
解决方案
setlocal EnableDelayedExpansion
for /F "tokens=1-22 delims=," %%a in (test.csv) do (
rem Define the sorting column in next *three lines*: %%a=1, %%b=2, etc...
if not defined V%%~l set "V%%~l=1000"
set /A "V%%~l+=1"
set "line[%%~l!V%%~l!]=%%d,%%f,%%l"
)
for /F "tokens=1* delims==" %%a in ('set line[') do echo %%b >> result2.txt
如果有多个具有相同邮政编码的记录,则有必要识别每个记录。V<zip code>
此解决方案对具有相同邮政编码的每条记录使用称为计数器的变量。然后,将此类变量的值连接到邮政编码本身,以便为每条记录创建唯一键。该程序假设最多有 999 条具有相同邮政编码的记录;如果这个值不够,只需在if not defined V%%~l set "V%%~l=1000"
一行中添加一个零...
推荐阅读
- python - 将列转换为日期时间列的问题 ValueError:无法组装日期时间:未转换的数据仍然存在:2
- python - Python:如果满足条件(例如“是”),有没有办法在新列中获取所有列名
- go - 如何使用 client-go 获取 Node 状态
- javascript - JS - `let` 与 `var` 的自动初始化行为
- javascript - 部署 React 时出现错误“路径”参数必须是字符串 - 云函数中的可加载组件示例代码
- silverstripe - 在 Silverstripe 中,如何像在 DataObjects 中一样自动为 Pages 创建 CMS 字段?
- sql-server - 如何强制 drop temp table 命令完全删除表?
- gitlab - Sourcetree 现有 repo 没有分支,不能创建一个
- spring-boot - Spring Kafka Stream - 标头中没有类型信息,使用 BiFunction 时没有提供默认类型
- powershell - 在 bat 文件中以管理员身份运行 powershell 命令