[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何取最后一列?

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

望大家指教。

TOP

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

TOP

也可以用 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. */
复制代码

TOP

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

TOP

不过多考虑通用性,只考虑效率和便携的话可用纯批方案:
  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
复制代码

TOP

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 调用则可输出到控制台,便于重定向

TOP

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

TOP

返回列表