通过命令行替换csv中的特定文本

sri*_*amn 1 csv command-line replace batch-file findstr

我有csv格式的数据从中获取输出SQL Server.数据有一些NULLN.A.值写出来,这使得列字符类型 - 否则它将只包含整数.是否可以通过批处理文件语句查找并用数字替换这些值 - 例如,-1表示NULL和-2表示N.A..以下是数据的现状:

    Col A,  Col B,  Col C,  Col D,  Col E,  Col F,  Col G,  Col H
    NULL,   13,     11,     N.A.,   4710,   N.A.,   1,      1
    5,      NULL,   13,     7070,   N.A.,   4920,   N.A.,   1
    5,      NULL,   12,     8680,   N.A.,   9130,   N.A.,   1
Run Code Online (Sandbox Code Playgroud)

我想把它转换成这个:

    Col A,  Col B,  Col C,  Col D,  Col E,  Col F,  Col G,  Col H
    -1,     13,     11,     -2,     4710,   -2,     1,      1
    5,      -1,     13,     7070,   -2,     4920,   -2,     1
    5,      -1,     12,     8680,   -2,     9130,   -2,     1
Run Code Online (Sandbox Code Playgroud)

通过批处理语句执行此操作非常重要,因为这是一个中间输出,并立即被另一个程序读入.我看了一下这个findstr命令(http://technet.microsoft.com/en-us/library/bb490907.aspx),但我很清楚如何编写确切的语法并执行替换操作.有用的输入非常感谢!

MC *_* ND 5

@echo off
    setlocal enableextensions enabledelayedexpansion

    (for /f "tokens=*" %%f in (a.csv) do if not "%%f"=="" (
            set "line=%%f"
            set "line=!line:NULL=-1!"
            set "line=!line:N.A.=-2!"
            echo(!line!
    )) > b.csv

    endlocal
Run Code Online (Sandbox Code Playgroud)

如果如OP所述,文件是指示的格式,仅包含整数,NULL和NA,或者至少它不包含特殊字符,则这将起作用.


fox*_*ive 5

这使用了一个名为的辅助批处理文件repl.bat- https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

repl.bat在同一文件夹中的批处理文件或者是道路上的一个文件夹中.

它应该更强大,更快.

type file.csv |repl "NULL" "-1" |repl "N\.A\." "-2" >newfile.csv
Run Code Online (Sandbox Code Playgroud)