我有一个CSV文件(以下提供格式),分隔符设置为,
。
作为输出,我们想从CSV下面删除column 4 ( Values )
。
我们仅在WINDOWS批处理脚本中需要它,因为服务器上不允许其他脚本设置。服务器也具有 powershell ,但是我们不确定如何利用powershell命令来实现以下目的。
CSV如下:
ID, NAME, SR, Values, Status
"1", "Raj", "123", "A,B,C,D,E", "False"
"2", "Rahul", "456", "C", "False"
我们尝试了这个,但是,它没有按预期工作:
(Get-Content .\testCSV.csv) | Foreach-Object { $_.split()[4] -join ' ' } | Out-File .\file.txt
预期结果(已删除“值”列)
ID, NAME, SR, Status
"1", "Raj", "123", "False"
"2", "Rahul", "456" , "False"
答案 0 :(得分:2)
与其尝试将CSV文本砍成纯文本,不如将其客观化,然后选择要保留的属性,就容易得多。
test.csv:
ID, NAME, SR, Values, Status
"1", "Raj", "123", "A,B,C,D,E", "False"
"2", "Rahul", "456", "C", "False"
test.ps1:
ipcsv test.csv | select ID,NAME,SR,Values | export-csv test2.csv -NTI
结果:
"ID","NAME","SR","Values"
"1","Raj","123","A,B,C,D,E"
"2","Rahul","456","C"
如果您的CSV源是来自管道而不是文件,请使用ConvertFrom-CSV
。
答案 1 :(得分:2)
如果您使用Import-CSV
的内置CSV功能,则可以使用Select-Object
的{{1}}排除属性/列。
在powershell提示符或脚本中:
-ExcludeProperty
来自cmd或batch-file:
Import-CSV .\testCSV.csv | Select-Object * -ExcludeProperty Values | Export-CSV .\Modified.csv -NoTypeInformation
答案 2 :(得分:1)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q56003792.txt"
SET "outfile=%destdir%\outfile.txt"
(
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO CALL :drop4 %%a
)>"%outfile%"
GOTO :EOF
:drop4
:: all data to 'line'
SET "line=%*"
CALL ECHO %%line:*%1, %2, %3, %4, =%1, %2, %3, %%
GOTO :eof
您需要根据自己的情况更改sourcedir
和destdir
的设置。
我使用了一个名为q56003792.txt
的文件,其中包含您的数据用于测试。
产生定义为%outfile%的文件
usebackq
选项是必需的,因为我选择在源代码周围添加引号
文件名。
由于您的所有数据行均包含以,
分隔的列,因此我建议使用这种纯批量解决方案。
序言建立要使用的目录和文件名。这些是针对我的系统定制的。
该例程的主要内容是for/f
,它调用子例程drop4
逐字提供每个完整的文本行。 for
括在括号中,以将整个例程输出重定向到指定文件。
子例程仅将参数分配给标准环境变量(因为批处理子字符串只能应用于普通变量)。
call echo
行执行了echo
,替换了提供的参数%1 ..%4,因此字符串echo
ed将是原始行,所有字符最多用,
分隔的4个参数替换为[用,
分隔的前3个参数-删除列4。