Board logo

标题: [问题求助] gawk或dos能方便实现去重和统计重复次数的操作吗? [打印本页]

作者: shenghuo    时间: 2013-7-30 22:27     标题: gawk或dos能方便实现去重和统计重复次数的操作吗?

1.比如数据:
aaa
aaa
bbbb
bbbb
bb
cccccc
ccc
ccc
ccc
bbb
bbb

输出为:aaa 2
            bbbb 2
            bb 1
            cccccc 1
            ccc 3
            bbb 2

或者频度在前面也可以 类似linux的  uniq

2.在上一步的基础上,是否可以简便的实现 根据$1 或$2排序 linux的sort还是比较方便的

3.在上面的基础上,是否可以实现只显示排序后的 前多少行?   类似 linux的 head -n

可以通过通道实现。。。。 呵呵
作者: gawk    时间: 2013-7-30 23:17

先试试这个能否满足第一步
http://bbs.bathome.net/thread-25608-1-1.html
后面的几步都可以实现,慢慢来,别着急。先等等看PowerShell脚本是否更加简洁。
作者: CrLf    时间: 2013-7-31 00:09

本帖最后由 CrLf 于 2013-7-31 00:15 编辑

看来楼主会 linux,其实下个工具包就都有了。

顶楼例子可以用纯批:
  1. @echo off
  2. set max=3
  3. for /f "delims=" %%a in (a.txt) do set /a "ar[%%a]+=1"
  4. for /f "tokens=1,2 delims==" %%a in ('set ar[') do (
  5.    set /a "n+=1,1/(n/max)"||goto break
  6.    echo %%a %%b
  7. )
  8. :break
  9. pause
复制代码
不过文本操作这种事如果条件允许,还是建议用 linux 里的组合
作者: shenghuo    时间: 2013-7-31 08:31

回复 3# CrLf


    什么工具包呢?
作者: shenghuo    时间: 2013-7-31 08:31

回复 2# gawk


    多谢
作者: gawk    时间: 2013-7-31 08:43

回复 4# shenghuo


UnxUtils
http://sourceforge.net/projects/unxutils/files/
作者: shenghuo    时间: 2013-7-31 09:21

回复 6# gawk


    使用了这个包 path后  more 就不能用了?
作者: shenghuo    时间: 2013-7-31 09:41

本帖最后由 shenghuo 于 2013-7-31 09:53 编辑

回复 6# gawk


    呵呵 很奇怪啊,我之前path c:\gawk     下载了这个包后,我就path ;

    然后 path C:\UnxUtils\usr\local\wbin

    结果用more的时候  提示不是内部外部命令了。。。。

    当内部命令和外部命令重复时 怎么使用外部命令呢? 比如 sort  dos也有
作者: gawk    时间: 2013-7-31 09:48

回复 8# shenghuo


你设置PATH的方法不对,应该把C:\UnxUtils\usr\local\wbin追加到PATH后面,而不是把PATH设置成C:\UnxUtils\usr\local\wbin,否则系统原来的C:\windows\system32等就被从PATH里面删掉了。
  1. set PATH=%PATH%;C:\UnxUtils\usr\local\wbin
复制代码

作者: shenghuo    时间: 2013-7-31 09:57

回复 9# gawk


    多谢 大神们的指导
作者: shenghuo    时间: 2013-7-31 10:06

回复 9# gawk


和linux  有些不同  是我用错了 还是  支持不好呢?  求教
作者: gawk    时间: 2013-7-31 10:40

回复 11# shenghuo


uniq之前是需要先排序的

[root@ tmp]# uniq -c urfile
      1 jixie
      1 nengyuan
      1 jixie

[root@ tmp]# sort urfile | uniq -c
      2 jixie
      1 nengyuan
作者: shenghuo    时间: 2013-7-31 12:52

回复 12# gawk


求指点,有的命令参数 用-  有的用/  ?

sort  我用-  显示错误  用/ 可以了
作者: gawk    时间: 2013-7-31 14:06

回复 13# shenghuo


你这个sort /r调用的是windows自己的sort命令,不是UnxUtils里面的那个。
作者: CrLf    时间: 2013-7-31 17:20

path 变量中的路径是从前到后依次匹配的,所以如果你要优先调用 C:\UnxUtils\usr\local\wbin 的命令,就得写成:
  1. path C:\UnxUtils\usr\local\wbin;%path%
复制代码
这样就会先匹配 C:\UnxUtils\usr\local\wbin 下的可执行文件,然后再去搜索原来的 %path% 路径
作者: shenghuo    时间: 2013-7-31 19:05

回复 15# CrLf


    试验了一下,把UnxUtils外部命令文件夹放到前面使用sort 会出错,不知道什么原因, 放到后面就没事了

[attach]6640[/attach][attach]6639[/attach]

确定 文件夹中有 sort.exe
[attach]6641[/attach]
作者: gawk    时间: 2013-7-31 20:14

回复 16# shenghuo


方法1、把sort.exe放到当前目录下
方法2、在命令里面使用sort.exe的完整路径




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