免费注册 查看新帖 |

Chinaunix

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

使用 head 和 tail 以块方式读取文本流 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-29 15:52 |只看该作者 |倒序浏览

                技巧: 使用 head 和 tail 以块方式读取文本流认识您的文本实用程序




文档选项



未显示需要 JavaScript
的文档选项


将此页作为电子邮件发送
级别: 初级
Jacek Artymiak
(
[email=jacek@artymiak.com?subject=%E4%BD%BF%E7%94%A8%20head%20%E5%92%8C%20tail%20%E4%BB%A5%E5%9D%97%E6%96%B9%E5%BC%8F%E8%AF%BB%E5%8F%96%E6%96%87%E6%9C%AC%E6%B5%81]jacek@artymiak.com[/email]
), 自由顾问、开发人员和作家
2002 年  10 月  09 日
Jacek 在本技巧文章中介绍了 head 和 tail 命令,它们对于以块方式处理静态和动态文件中的数据非常有用。
                       
      
假定您想只处理文件的一部分,譬如头几行或后几行,那您该怎么做呢?请使用
        head (它将头 10 行发送至标准输出)或
        tail (它将后 10 行发送至标准输出)。
      
                       
      
您可以通过使用
        -n 选项改变这些命令发送至其标准输出的行数(当然,输出结果将随 XF86Config 文件的内容而不同):
      
                       
      
                               
        清单 1. 将 XF86Config 中选定行数的内容发送至标准输出
                       
      
                       
      
                       
      $ head -n 4 /etc/X11/XF86Config
# File generated by anaconda.
# **********************************************************************
# Refer to the XF86Config(4/5) man page for details about the format of
# this file.
$ tail -n 4 /etc/X11/XF86Config
Modes       "1600x1200"
ViewPort    0 0
EndSubsection
EndSection
                       
      
如果您想让
        head 或
        tail 以字节而不是以行为单位,那该怎么办呢?您可以用
        -c 选项代替
        -nhead -c 200
          file
                               
         ,或者使用
        tail -c 200
          file
                               
         来显示后 200 个字符。如果数字后面跟有
        b (表示块(block)),那么这个数字将被乘以 512。类似地,跟有
        k (表示千字节(kilobyte))表示用 1024 去乘给定的数字,而跟有
        m (表示兆字节(megabyte))表示用 1048576 字节去乘给定的数字。
       选项。因此,要显示前 200 个字符,请使用
        
                       
      
请记住,
        head file1 file2 file3 和
        cat
file1 file2 file3 | head 之间有重大差别。前者将打印每个文件指定行数的内容,不同文件的内容之间用头信息隔开,头信息以
        ==> 后跟文件名开头。后者将打印由 cat 命令后所列文件组成的输入流中指定行数的内容,但将把输入流作为单个文件对待。可以使用
        -q (表示静默(quiet))选项关闭文件名头信息。与
        -q 相反的是
        -v (表示详列(verbose))。
      
                       
      
假如您要处理的文件在处理期间一直在发生变化(比如,当您让
        head 或
        tail 读取来自正在被另一个命令写入的文件的数据时,就是这种情况),请使用
        -f 选项让 tail 持续读取来自指定文件的数据并将这些数据发送至 tail 自己的标准输出中。通过管道发送数据时该选项会被忽略。因此,
        cat file | tail -f 将不会得到所期望的结果,但
        tail -f file 则可以。
      
                       
      
(如果
        tail 正在读取的文件不止一个,那么各行内容之间将用标准头信息隔开,以指明它们来自哪个文件,标准头信息以
        ==> 开头。)
      
                       
      
这个选项用于监视系统日志再合适不过,譬如,在单独的终端窗口(或单独的控制台)中执行的
        tail -f /var/log/access.log 将持续打印每次点击后新添加的 Apache 访问日志条目,一直到您用 Ctrl-C 停止它为止。
      
                       
      
通过组合使用
        head 和
        tail ,可以从文件的中间部分读取给定长度的一块数据!下面说明如何做到:假定您想从文件开头算起第 1000 字节处开始读取一块 789 字节的数据。可以使用
        cat file | head -c 1788 | tail -c 789 来解决这一问题。
      
                       
      
tac 命令逆序排序文件
                       
      
如果您想对文件中的各行进行逆序排序,该怎么做呢?这就要用到
        tac 命令。(请注意,
        tac 由
        cat 逆序拼写而成。)该命令对所列出的文件中的各行或各段进行逆序排序。
      
                       
      
该命令不能逆序排序各文件的顺序 — 这个任务您得自己做,以逆向顺序在
        tac 命令后列出各文件即可。作为说明
        tac 的工作原理的示例,请在您的主目录中对一些文件使用
        ls -l | tail 和
        ls -l | tail | tac ,比较其结果。
      
                       
      
您有问题或意见吗?我愿洗耳恭听 — 请将邮件发送至
        
jacek@artymiak.com

      
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/29141/showart_392590.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP