使用bat文件删除(x)3列中的最后几行

时间:2018-01-26 15:54:20

标签: batch-file

我的文本文件包含列中的数据。我想删除一列或多列中的x行数。 我原来的文件看起来是:

Column.1    Column.2    Column.3    Column.4    Column.5
dhd21       393j        A/B/C/      1224        ouiyt
nvd0        8ncbb       E/F/G       125a        b09bv
xnxb        x9jd        m/f/e/      ljkjh       bhh66
hyru        jsdj        M7D7W7Q7    mnuy        bbbb
098y        sa56        by6         hhgt        xghsh

我希望输出看起来像这样,(例如从第2列删除3行,从第4列删除4)

Column.1    Column.2    Column.3    Column.4    Column.5
dhd21       393j        A/B/C/      1224        ouiyt
nvd0        8ncbb       E/F/G                   b09bv
xnxb                    m/f/e/                  bhh66
hyru                    M7D7W7Q7                bbbb
098y                    by6                     xghsh

我的代码需要整列:

FOR /f "tokens=2,3 delims=  " %%B in (in.txt) do @echo %%B  %%C >> out.txt

1 个答案:

答案 0 :(得分:0)

这可以使用sqlite3.exe批量完成。如果你没有sqlite3 已经,你可以从Sqlite download页面获取它。 它是一个小的独立可执行文件。

@echo off
setlocal

sqlite3 ^
-cmd "create table t1 (c1, c2, c3, c4, c5)" ^
-cmd ".mode tab" ^
-cmd ".import test.csv t1" ^
-cmd "update t1 set c4 = '' where c1 = 'nvd0'" ^
-cmd "update t1 set c2 = '', c4 = '' where c1 = 'xnxb'" ^
-cmd "update t1 set c2 = '', c4 = '' where c1 = 'hyru'" ^
-cmd "update t1 set c2 = '', c4 = '' where c1 = '098y'" ^
-cmd ".separator \"\t\" \"\r\n\"" ^
-cmd ".once output.csv" ^
-cmd "select * from t1" ^
":memory:" ""

echo Done

由于命令很长,因此在行尾使用^将继续 命令到下一行。

t1在内存中创建,有5列。 .mode tab.import test.csv t1允许从文件导入的操作 test.csv使用制表符分隔符并插入表t1

对表中c1 =(值匹配)的行进行了四次更新。 如果满足条件,则可以将第2列或第4列或两者设置为空字符串。

.separator ...将制表符设置为分隔符,将CRLF设置为输出的行尾。 .once ...将输出文件设置为output.csv,以便下一个sql命令 只处理一次。

select * from t1打印表t1的所有行和所有列。

:memory:告诉sqlite3使用内存数据库而不是文件。 以下空引号只是一个空的sql语句所以 sqlite3将在没有交互的情况下关闭。

注意:在双引号参数中使用双引号,\可以转义 在"\"abc\""内的双引号被剥去外部 解释器引用,因此您将留下带引号的字符串"abc"