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

[文本处理] [已解决]批处理如何查找出文本中字符数最多的行/字符串长度最长的行

本帖最后由 慕夜蓝化 于 2020-9-29 17:35 编辑

BAT如何找出文本最大行?
有一小说文本开头部分:
  1.   文本豪客 [url]www.txt.hk[/url] 〓 [url]www.bbzw.net[/url] 拜拜中文
  2.   作品:堕落血天使
  3.   作者:天龙怒吟
  4.   男主角:楚明
  5.   内容简介:
  6.   堕落血天使,是天龙怒吟写的一部西方奇幻小说,主要讲述的是一个中国小鬼学了一身杂七杂八的武功,把各种西方大神揍的满头是包的故事。
  7.   正文
  8.   背景设定
  9.   天使等级的划分
复制代码
要求:
在批处理窗口中直接显示字数最长的行。
比如这一行:
  1. 堕落血天使,是天龙怒吟写的一部西方奇幻小说,主要讲述的是一个中国小鬼学了一身杂七杂八的武功,把各种西方大神揍的满头是包的故事。
复制代码
若具有相同字数的最大行,则全部显示。
比如这两行:
  1.   首先,在没有形成整个世界的时候,创世之神,生命之神,破灭之神从混沌开始初生,三位大神并称为第一代神,也就是最原始的神。
  2.   我们不能说毁灭就是邪恶的,因为,如果没有毁灭,也就没有了创造的意义,就正如没有生命的死亡,这个世界将无限的堆满了人群。
复制代码
求解。
踏实一些点.不要着急.你想要的时间都会给你.2

第三方http://www.bathome.net/s/tool/index.html?key=gawk
  1. @echo off
  2. gawk "{len=length($0);a[len]=a[len]?a[len]\"\n\"$0:\"\"$0;if(len>max)max=len;}END{print a[max]}" "a.txt"|find /v ""
  3. pause
复制代码

TOP

回复 42# terse


    试了一下,可以这样:
  1. (gc a.txt | group length| sort {[int32]$_.name}|select -last 1).group
复制代码
1

评分人数

    • terse: 这个转型高技术 + 1

TOP

回复 41# CrLf
脑子短路 顺序还是不能调
  1. (gc a.txt |sort length|group length| select -Last 1).group
复制代码

TOP

本帖最后由 CrLf 于 2015-3-17 18:05 编辑

回复 40# terse


    但 count 是 group 的长度,不是字符串的长度,用 count 排序得到的是最多匹配的 group
    应该可以在 sort 里处理 name 再排序,就像 ren 正则替换那样

TOP

回复 38# CrLf
Count 不是字符串

TOP

回复 36# tigerpower


    是的,感谢指正

TOP

回复 37# terse


    不是 count,是 name。这样写逻辑上更快,但我昨天试了一下发现 name 是字符串,100<2

TOP

回复 35# CrLf
不知改下顺序 有区别不
  1. (gc at.txt | group length| sort Count|select -Last 1).group
复制代码

TOP

本帖最后由 tigerpower 于 2015-7-4 07:15 编辑

sort后需加个length
  1. (gc a.txt | sort -desc length | group length | select -first 1).group
复制代码
或者不用group和sort:
  1. $r=gc a.txt;$m=($r|measure length -max).maximum;$r|?{$_.length -eq $m}
复制代码
1

评分人数

    • CrLf: 感谢指正技术 + 1

TOP

回复 34# terse


    改写个支持多行的
  1. (gc a.txt | sort -desc | group length | select -first 1).group
复制代码
1

评分人数

    • terse: 感谢分享技术 + 1

TOP

也来个POWERSHELL 直接SORT
  1. $r = $(gc a.txt | sort { $_.length })[-1]
  2. $r
复制代码

TOP

本帖最后由 tigerpower 于 2015-3-16 22:52 编辑

的确可以用Group-Object:
  1. powershell -C "$r=gc a.txt|group length|sort @{e={$_.name -as [int]}}|select -last 1;\"/* 一行最多{0}字 */`n\" -f $r.name;$r.group"
复制代码
或者
  1. powershell -C "$r=gc a.txt|group length;$r=$r|?{$_.name -eq ($r|measure name -max).maximum};\"/* 一行最多{0}字 */`n\" -f $r.name;$r.group"
复制代码

TOP

回复 31# tigerpower


    用 Object-Group 可能更方便

TOP

Windows Vista以上版本运行以下命令:
  1. powershell -C "$m=$r=$null;gc a.txt|%{$d=$_.length;if($d -gt $m){$r=$_;$m=$d}elseif($d -eq $m){$r+=\"`n\"+$_}};\"/* 一行最多{0}字 */`n\" -f $m;$r"
复制代码

TOP

返回列表