免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3117 | 回复: 6
打印 上一主题 下一主题

[文本处理] split的--filter选项怎么用? [复制链接]

论坛徽章:
1
亥猪
日期:2013-10-30 23:29:55
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-16 15:53 |只看该作者 |倒序浏览
RT,看了manual之后,还是不懂,比如下面的代码:
  1. split --filter='cat > $FILE && echo $FILE' -l 1000000 b
复制代码
filter里面的内容是干嘛的?

论坛徽章:
0
2 [报告]
发表于 2014-02-16 16:30 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
3 [报告]
发表于 2014-02-16 19:12 |只看该作者
  1. lz什么版本呀, 我的版本低了, 看不到这个选项
  2. [redhat@localhost 0213]$ split --version
  3. split (GNU coreutils) 5.97
复制代码

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
4 [报告]
发表于 2014-02-17 09:21 |只看该作者
默认情况下,split分割之后的文件名是这个样子的:

[root]# seq 15 > test.txt
[root]# ll
total 4
-rw-r--r-- 1 root root 36 Feb 17 09:14 test.txt
[root]# split -l 5 test.txt
[root]# ll
total 16
-rw-r--r-- 1 root root 36 Feb 17 09:14 test.txt
-rw-r--r-- 1 root root 10 Feb 17 09:14 xaa
-rw-r--r-- 1 root root 11 Feb 17 09:14 xab
-rw-r--r-- 1 root root 15 Feb 17 09:14 xac


可以使用 --filter 来自己定义文件的扩展名:
  1. split -l 5 test.txt --filter='cat > $FILE.txt'
复制代码

论坛徽章:
0
5 [报告]
发表于 2014-02-17 09:45 |只看该作者
回复 4# Shell_HAT
哇,学习了,感谢版主,以前完全不太懂这些命令
是不是可以这样理解,split命令会把拆分的行扔给filter后面的COMMAND,就像是管道符的作用一样?COMMAND里可以直接设置一些用户需要的fileter命令,grep,sed等等?
不过刚才试了一下COMMAND里也可以嵌套管道符,但是如果使用grep的时候必须grep成功,不然split就会退出了
  1. --filter=COMMAND
  2.               write to shell COMMAND; file name is $FILE
复制代码

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
6 [报告]
发表于 2014-02-17 10:26 |只看该作者
回复 5# runintostar


是的,基本上是这么个意思。

'--filter=command'
    With this option, rather than simply writing to each output file, write through a pipe to the specified shell command for each output file. command should use the $FILE environment variable, which is set to a different output file name for each invocation of the command. For example, imagine that you have a 1TiB compressed file that, if uncompressed, would be too large to reside on disk, yet you must split it into individually-compressed pieces of a more manageable size. To do that, you might run this command:

              xz -dc BIG.xz | split -b200G --filter='xz > $FILE.xz' - big-

    Assuming a 10:1 compression ratio, that would create about fifty 20GiB files with names big-aa.xz, big-ab.xz, big-ac.xz, etc.

论坛徽章:
1
亥猪
日期:2013-10-30 23:29:55
7 [报告]
发表于 2014-02-19 21:44 |只看该作者
回复 6# Shell_HAT
  1. split --filter='cat > $FILE && echo $FILE' -l 1000000 b | \
  2. xargs -P 3 -I {} bash -c 'sort {} > {}.$ && comm -1 -2 {}.$ a && rm {}*' | \
  3. tee ret | \
  4. sort | \
  5. uniq -c > ret.uniq
复制代码
这段代码--filter里面的COMMAND要怎么理解啊?没有看懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP