Board logo

标题: [文本处理] 批处理如何取最后一列? [打印本页]

作者: xslxslxsl    时间: 2013-4-9 09:35     标题: 批处理如何取最后一列?

现在我有一个文本,内容如:
123,4556,888
时代发生的,hh,222,8889
啊,h
……
均已逗号分隔,现在我想去文本的最后一列,内容如:
888
8889
h
……
该如何处理,毕竟每行的分隔符个数不一样,谢谢指点
作者: xslxslxsl    时间: 2013-4-10 01:32

望大家指教。
作者: CrLf    时间: 2013-4-10 03:25

正则贪婪匹配最简单了,这里用第三方 sed:
  1. sed "s/.*[,,]//" a.txt
复制代码

作者: CrLf    时间: 2013-4-10 03:33

也可以用 js 与 bat 的组合:
  1. @set @n=0;//&goto bat_main&^
  2. WScript.Echo(WScript.StdIn.ReadAll().replace(/.*[,,]/g,""))
  3. /*
  4. :bat_main
  5. @echo off
  6. cscript /nologo /e:jscript %0 <a.txt
  7. pause&exit/b
  8. */
复制代码

作者: CrLf    时间: 2013-4-10 03:39

再来个 awk 的特色:
  1. gawk -F ",|," "{print $NF}" a.txt
复制代码

作者: CrLf    时间: 2013-4-10 03:41

不过多考虑通用性,只考虑效率和便携的话可用纯批方案:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3. for %%b in (%%a) do set "str=%%b"
  4. echo;!str!
  5. )
  6. pause
复制代码

作者: CrLf    时间: 2013-4-10 03:47

vbs 方案:
  1. Set fso = CreateObject("scripting.filesystemobject")
  2. Set ts = fso.OpenTextFile("a.txt",1)
  3. Do Until ts.AtEndOfStream
  4.     str = ts.ReadLine
  5.     str = Replace(str,",",",")
  6.     ar = Split(str,",")
  7.     text = text & ar(UBound(ar)) & vbCrLf
  8. Loop
  9. WScript.Echo text
复制代码
若用 cscript 调用则可输出到控制台,便于重定向
作者: xslxslxsl    时间: 2013-4-10 08:42

回复真是太感谢你了,给了我这么多方案,当时我也考虑过用第三方的工具实现,但是用法上不熟悉,呵呵,给我上了一课,谢谢了,我去试试看。 7# CrLf




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