找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25774|回复: 7

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

[复制链接]
发表于 2013-4-9 09:35:02 | 显示全部楼层 |阅读模式
现在我有一个文本,内容如:
123,4556,888
时代发生的,hh,222,8889
啊,h
……
均已逗号分隔,现在我想去文本的最后一列,内容如:
888
8889
h
……
该如何处理,毕竟每行的分隔符个数不一样,谢谢指点
 楼主| 发表于 2013-4-10 01:32:58 | 显示全部楼层
望大家指教。
发表于 2013-4-10 03:25:10 | 显示全部楼层
正则贪婪匹配最简单了,这里用第三方 sed:
  1. sed "s/.*[,,]//" a.txt
复制代码
发表于 2013-4-10 03:33:23 | 显示全部楼层
也可以用 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. */
复制代码
发表于 2013-4-10 03:39:14 | 显示全部楼层
再来个 awk 的特色:
  1. gawk -F ",|," "{print $NF}" a.txt
复制代码
发表于 2013-4-10 03:41:20 | 显示全部楼层
不过多考虑通用性,只考虑效率和便携的话可用纯批方案:
  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
复制代码
发表于 2013-4-10 03:47:27 | 显示全部楼层
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 调用则可输出到控制台,便于重定向
 楼主| 发表于 2013-4-10 08:42:00 | 显示全部楼层
回复真是太感谢你了,给了我这么多方案,当时我也考虑过用第三方的工具实现,但是用法上不熟悉,呵呵,给我上了一课,谢谢了,我去试试看。 7# CrLf
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 03:08 , Processed in 0.019469 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表