Board logo

标题: [文本处理] 批处理怎样替换文本里空格为逗号? [打印本页]

作者: hkxinghu    时间: 2011-9-27 08:04     标题: 批处理怎样替换文本里空格为逗号?

本帖最后由 hkxinghu 于 2011-9-28 12:39 编辑

文本里包括多列  每列都是不规则的空格分隔 想把这些空格替换成一个,

1      11     1111               112
22   100   222      111111111
111  1      22        3333333

批处理后要的结果

1,11,1111,112
22,100,222,111111111
111,1,22,3333333
作者: CrLf    时间: 2011-9-27 08:50

  1. @(for /f "delims=" %%a in (a.txt)do echo;&for %%b in (%%a)do set/p=%%b)<nul>b.txt
复制代码
  1. %1 @cmd /q /v /c"for /f "delims^=" %%a in (a.txt)do set str=%%a&(for /l %%b in (-9 1)do set str=!str:  = !)&echo !str: =,!"
复制代码
手机不便,怎么短怎么写,不考虑可读性…
作者: awk    时间: 2011-9-27 10:18

  1. gawk -v OFS=, "$1=$1" a.txt >b.txt
复制代码

作者: hankerer    时间: 2011-9-27 11:02

借一下fr工具
  1. @echo off
  2. for /f "tokens=*" %%i in (a.txt) do echo %%i>>b.txt
  3. fr /r:" +" /t:"," b.txt
复制代码

作者: awk    时间: 2011-9-27 11:27

回复 4# hankerer


保留最后一行,前面两行可以删掉吧?
作者: awk    时间: 2011-9-27 11:30

  1. sed -r "s/ +/,/g" a.txt >b.txt
复制代码

作者: hankerer    时间: 2011-9-27 12:02

回复 5# awk


   前两行是去行首的空白字符的
作者: awk    时间: 2011-9-27 14:27

回复 7# hankerer


但是,行首本来就没有空白字符啊。
作者: hankerer    时间: 2011-9-27 17:09

回复  hankerer


但是,行首本来就没有空白字符啊。
awk 发表于 2011-9-27 14:27



    哈。不知道为啥我复制到本地的记事本上就多了行首的空格。行首没空格的话只一句fr就够了。
作者: zaixinxiangnian    时间: 2011-9-27 17:30

回复 2# CrLf


没有看懂你这个是什么用法,能否给解释下
    set/p=%%b)<nul>b.txt
作者: hkxinghu    时间: 2011-9-27 21:26

本帖最后由 hkxinghu 于 2011-9-28 07:27 编辑

回复 2# CrLf


    感谢版主用手机写的批处理啊 ,第二个可以用。但是有个问题就是单独运行可以  用其他批处理CALL 调用他就不行 不知道什么原因呢
%1 @cmd /q /v /c"for /f "delims^=" %%a in (a.txt) do set str=%%a&(for /l %%b in (-9 1) do set str=!str:  = !)& >>result.txt echo !str: =,!"
作者: Hello123World    时间: 2011-9-29 13:00

  1. @echo off
  2. (for /f "delims=" %%a in (a.txt)do echo;&for %%b in (%%a)do set/p=%%b,)<nul
  3. pause
复制代码

作者: xslxslxsl    时间: 2011-9-29 14:01

回复 3# awk



    gawk -v中的v是什么意思啊?
作者: FOR    时间: 2011-9-29 14:37

3楼为什么要 $1=$1 呢?没有还不行。
作者: awk    时间: 2011-9-29 16:46

回复 13# xslxslxsl


-v主要用来在awk里面引用外部变量,这里是用来设置OFS=,(输出时域分隔符设置成逗号)
作者: awk    时间: 2011-9-29 16:48

回复 14# FOR


设置OFS=,之后,需要对整行内容进行重组,$1=$1就是起到这个作用,你用$2=$2也行的。
作者: FOR    时间: 2011-9-29 18:39

回复 16# awk


    谢谢,还是不理解,就当是个公式强记吧
作者: xslxslxsl    时间: 2011-9-30 08:27

回复 15# awk
哦,谢谢指点,原来是这样啊,也就是要用OFS的时候,这个v也要一起用的是不是啊?
作者: awk    时间: 2011-9-30 08:31

回复 18# xslxslxsl


还有另外一种写法:
  1. gawk "BEGIN{OFS=\",\"}$1=$1" a.txt >b.txt
复制代码

作者: xslxslxsl    时间: 2011-9-30 13:33

本帖最后由 xslxslxsl 于 2011-9-30 13:35 编辑

回复 19# awk

原来是这样的啊,其实我还不是很清楚GAWK的用法,虽然这些天在往上看,可是就是不能很好的理解,毕竟在WINDOWS系统下的教材很少的,所以要再次谢谢你哦。关于这方面的问题,我今后也要多多向你请教,望能继续耐心指导,非常感谢。
作者: awk    时间: 2011-9-30 13:35

回复 20# xslxslxsl


可以照搬UNIX上的教程,只需要注意双引号和单引号就行了,其它没啥区别。
作者: xslxslxsl    时间: 2011-10-2 20:03

回复 21# awk


   首先还是感谢你的指点,谢谢。 是的,这方面的确是这样的,那就是搞不清楚,哪些东西在大括号内,哪些在大括号外,对于GAWK 中的PATTERN {ACTION}形式不是很清楚,有些教程上的形式又是GAWK [OPTION] '{PATTERN+ACTION}' {FILENAMES},对于哪些东西在大括号内,哪些在大括号外的,我还真是搞不清楚,能否指点迷津,谢谢。




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