使用 head 和 tail 以块方式读取文本流
2007-07-25 12:21
246 查看
文章中介绍了 head 和 tail 命令,它们对于以块方式处理静态和动态文件中的数据非常有用。
假定您想只处理文件的一部分,譬如头几行或后几行,那您该怎么做呢?请使用
您可以通过使用
清单 1. 将 XF86Config 中选定行数的内容发送至标准输出
如果您想让
请记住,
假如您要处理的文件在处理期间一直在发生变化(比如,当您让
(如果
这个选项用于监视系统日志再合适不过,譬如,在单独的终端窗口(或单独的控制台)中执行的
通过组合使用
tac 命令逆序排序文件
如果您想对文件中的各行进行逆序排序,该怎么做呢?这就要用到
该命令不能逆序排序各文件的顺序 — 这个任务您得自己做,以逆向顺序在
假定您想只处理文件的一部分,譬如头几行或后几行,那您该怎么做呢?请使用
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选项代替
-n选项。因此,要显示前 200 个字符,请使用
head -c 200 file,或者使用
tail -c 200 file来显示后 200 个字符。如果数字后面跟有
b(表示块(block)),那么这个数字将被乘以 512。类似地,跟有
k(表示千字节(kilobyte))表示用 1024 去乘给定的数字,而跟有
m(表示兆字节(megabyte))表示用 1048576 字节去乘给定的数字。
请记住,
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,比较其结果。
相关文章推荐
- 使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息
- 22. 使用 awk / grep / head / tail 命令进行文本 / 日志分析 (/home/D/acc.log)
- 22. 使用 awk / grep / head / tail 命令进行文本 / 日志分析
- Linux文本数据提取之head,tail实例详解
- 【Linux命令详解】12、文本内容显示―[ cat、tac、more、less、tail、head]
- HttpClient-----1、使用HTTP的GET方式读取网络数据
- 使用Microsoft.Jet.OLEDB.4.0读取数据会出现当某一字段内分别含有文本和数字的混合数据时,某一类型的数据会产生丢失。
- Fileatream表示文件流,它能够打开和关闭文件,并对文件进行单字节的读写操作。 StreamReader和StreamWriter以文本方式对流进行读写操作。建立一个文本文件,分别使用上面两种方
- Linux基础文本查看命令之 cat,tac,more,less,head,tail
- 使用分页方式读取超大文件的性能试验
- python读取数值文本数据比较--一般读取方式 Vs numpy
- 表单form数据默认以键值对的形式将数据回发到服务器,回发非纯文本需使用enctype=multipart/form-data方式编码为整条消息
- C#读取txt文本文件的几种方式
- 一天一个shell命令 linux文本操作系列-head,tail命令详解
- 使用javascript以键值对的方式读取查询字符串【QueryString】
- Demo16 :获取一个URL文本(使用URL类构造一个输入对象并读取其内容)
- 显示文本命令大全(cat, tac, more,less,head,tail,nl,od)
- CMD文件中用FOR命令读取文本文件内容到变量,以及和PsExec搭配使用的方法和例子
- Java基础知识强化之网络编程笔记17:Android网络通信之 使用Http的Post方式读取网络数据(基于HTTP通信技术)
- 使用libpng,libjpeg从文件读取和从内存读取2中方式的实现