Board logo

标题: [文本处理] 【已解决】批处理如何删除多个txt文本的第一列/首列 [打印本页]

作者: meiszp    时间: 2013-7-28 14:49     标题: 【已解决】批处理如何删除多个txt文本的第一列/首列

现有许多txt文件需要删除第一列,求批处理。希望可以一次处理文件夹下所有的txt文件。
如果还需要删除第1、2行,还需要怎么做?
这两个要求可以做一个bat,提示是否删除第1、2行。

列与列之间可能是空格、tab或其他符号分隔。
文件格式如附件
作者: gawk    时间: 2013-7-28 15:59

  1. sed -i -r -e "s/^[[:space:]]+//" -e "s/^[^[:space:]]+[[:space:]]+//" *.txt
复制代码

作者: CrLf    时间: 2013-7-28 17:30

纯批方案:
  1. @echo off
  2. for %%a in (*.txt) do (
  3.    (for /f "tokens=1*" %%b in ("%%a
  4. ) do echo %%c)>$
  5.    move /y $ %%a
  6. )
复制代码
gawk 方案,因为因为不内置支持输出结果到输入文件的功能,所以比 sed 麻烦点也慢点:
  1. @echo off
  2. for %%a in (*.txt) do gawk "sub($1,\"\")" %%a>$&move /y $ %%a
复制代码
纯 gawk 也可以构造出输出到原文件的代码,不过繁琐且很占内存,还是没有 sed 合适:
  1. gawk "{sub($1,\"\");text[FILENAME]=text[FILENAME] ORS $0}END{for(F i
  2. n text){print text[F] >F}}" *.txt
复制代码

作者: meiszp    时间: 2013-7-28 18:04

回复 2# gawk

将代码复制到txt,更给为bat运行,好像不行哦。
作者: meiszp    时间: 2013-7-28 18:06

回复 3# CrLf

将代码复制到txt,更给为bat运行,需要修改的txt文件里的数据全没了。
作者: CrLf    时间: 2013-7-28 18:09

回复 5# meiszp


    测试遗留的笔误已修改
    sed 和 gawk 是第三方工具,需下载到运行目录下以便调用
作者: gawk    时间: 2013-7-28 19:02

回复 4# meiszp


    下载一个sed.exe放到C:\Windows\system32文件夹下面
作者: meiszp    时间: 2013-7-28 19:05

回复 6# CrLf


    谢谢!纯批方案很好。如果还要删除前两行呢,该怎么弄?最后能有选择的提示。
作者: terse    时间: 2013-7-28 19:07

纯批 的话 修改 tokens=1* 为 "skip=2 tokens=1*"
sed 方案
  1. @echo off
  2. set/pstr=删除 1 2 行输入y
  3. if /i "%str%" == "y"  (set str=1,2d;) else set "str="
  4. sed  -i "%str%s/^[ \t]*//;s/[^ \t]*[ \t]//" *.txt
  5. pause
复制代码

作者: meiszp    时间: 2013-7-28 19:09

回复 7# gawk
谢谢!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2