Board logo

标题: [文本处理] 批处理如何删除文本中同一行里以指定字符分隔开来的多余的相同的字段/列 [打印本页]

作者: daohe    时间: 2013-4-12 11:22     标题: 批处理如何删除文本中同一行里以指定字符分隔开来的多余的相同的字段/列

本帖最后由 pcl_test 于 2016-11-19 23:33 编辑

a.txt有1万行左右,  每一行都包含几个图片地址, 可能是jpg,gif,png, 并且有的会带   问号?  逗号,   大括号{}  连字符-   下划线_   句号.   空格   等特殊符号
需要删除每一行当中重复的图片地址
比如:
http://www.a.com/b/c.jpg|||http://www.a.com/b/d.jpg|||http://www.a.com/b/c.jpg 处理后得到  http://www.a.com/b/c.jpg|||http://www.a.com/b/d.jpg
每一行的图片都用三条竖线符号|||  分割
下面举例

a.txt
http://www.a.com/b/c.jpg|||http://www.a.com/b/d.jpg|||http://www.a.com/b/c.jpg
http://www.a.com/b/e.jpg|||http://www.a.com/b/c.jpg
http://www.a.com/b/f.jpg|||http://www.a.com/b/f.jpg
http://www.a.com/b/c.jpg
http://www.a.com/b/d.jpg
处理后得
b.txt
http://www.a.com/b/c.jpg|||http://www.a.com/b/d.jpg
http://www.a.com/b/e.jpg|||http://www.a.com/b/c.jpg
http://www.a.com/b/f.jpg
http://www.a.com/b/c.jpg
http://www.a.com/b/d.jpg

求VBS,
批处理经常会出现莫名的错误, 比如会删除http: 只留下//后面的文本
作者: apang    时间: 2013-4-12 15:21

  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set file = fso.OpenTextFile("a.txt",1)
  3. Do Until file.AtEndOfStream
  4.    strLine = file.ReadLine
  5.    If strLine <> "" Then
  6.       strURL = strURL & GetURL(Split(strLine,"|||")) & vbCrLf
  7.    End If
  8. Loop
  9. fso.CreateTextFile("b.txt",True).Write strURL
  10. MsgBox "OK"
  11. Function GetURL(ar)
  12.    For i = 0 to UBound(ar)
  13.       If InStr(LCase(str),LCase(ar(i)) & "|||") = 0 Then
  14.          str = str & ar(i) & "|||"
  15.       End If
  16.    Next
  17.    GetURL = Left(str,Len(str)-3)
  18. End Function
复制代码

作者: CrLf    时间: 2013-4-12 16:16

  1. sed "s/|||/\n/g" a.txt|sort|uniq
复制代码

作者: BAT-VBS    时间: 2013-4-12 21:29

批处理经常会出现莫名的错误, 比如会删除http: 只留下//后面的文本

这个不能怪批处理,只能怪写批处理的人水平还不到家。
作者: terse    时间: 2013-4-13 00:07

GAWK 练手
  1. gawk -F^| "{for(i=1;i<=NF;i++)if($i>0)if(a[NR$i]<1){v[NR]=v[NR](v[NR]?FS FS FS:\"\")$i;a[NR$i]++}print v[NR]}" A.txt>b.txt
复制代码

作者: pcl_test    时间: 2016-11-19 23:42

  1. rem win7及以上系统运行
  2. powershell -c "gc '文本.txt'|%%{($_.trim() -split '\|+' |group|%%{$_.Name}) -join '|||'}"
  3. pause
复制代码





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