|
paste
paste 工具可以对文件中的域进行合并。它从每个源文件中提取一行内容,并将其与另外一个源文件中的一行内容合并在一起。
举例来说,假设文件 “fileone” 的内容如下所示:
|
另外,我们还有一个 “filetwo” 文件,其内容如下所示:
|
下面的命令将这两个文件的内容合并在一起,如下所示:
|
如果 fileone 中的行数比 filetwo 多,那么 paste 操作依然会继续,不过在制表符后面是一些空项。
制表符字符是默认的分隔符,但是我们可以使用 -d 选项将其修改成任何其他值。
|
我们也可以使用 -s 选项将 fileone 的内容在一行中输出,后面加上一个回车键,然后再显示 filetwo 的内容。
|
join
join 是 paste 的一个很好的增强版本。join 只有在所要连接的文件共享某个共同的域时才会工作。
举例来说,考虑我们上面介绍 paste 时所使用的两个文件。下面是在使用 join 对其进行合并时所发生的事情:
|
注意这并没有显示任何东西。join 工具必须要在所操作的文件之间找到共同的域,默认情况下,它期望这个共同的域就是第一个域。
要了解这是如何工作的,我们可以尝试添加一些新内容。假设 fileone 现在包含以下内容:
|
filetwo 现在包含以下内容:
|
现在,再次尝试下面的命令:
|
此时第一个域相同的地方就会被识别出来,匹配项也就进行了合并。paste 是盲目地从每个文件中提取内容并创建输出结果;而 join 则是只合并那些匹配的行,这种匹配必须非常精确。举例来说,假设您向 filetwo 文件中添加一行内容:
|
现在这个命令只会产生下面的输出结果了:
|
只要这两个文件不再匹配了,就不会再执行任何操作了。第一个文件的每一行都匹配且只匹配于第二个文件相同行的默认域。如果找到匹配项,它们就会组成输出;否则就不再执行任何操作了。
默认情况下,join 只会查找第一个域进行匹配,并输出所有列的内容;不过我们可以对这种行为进行修改。-1 选项让我们可以指定使用哪个域作为 fileone 中的匹配项, -2 选项让我们可以指定使用哪个域作为 filetwo 中的匹配项。
举例来说,要对 fileone 的第二个域和 filetwo 的第三个域进行匹配,我们可以使用下面的语法:
|
-o 选项可以以 {file.field} 格式来指定输出结果。因此,要在匹配行上打印 fileone 的第二个域和 filetwo 的第三个域,语法为:
|
join:一个实际的例子
在实践中可以使用 join 工具最明显的方法是从 /etc/passwd 中提取用户名和对应的主目录项,并从 /etc/group 文件中提取组名。组名在 /etc/passwd 文件中是以数字的格式出现在第四个域中的。类似地,它们在 /etc/group 文件中是在第三个域中出现的。
|
| Linux服务器傻瓜式安装完全接触 | 08-31 |
| Linux中新闻组服务器和客户端的使 | 08-14 |
| Linux下查找漏洞的几种必备工具 | 08-13 |
| Linux操作系统上摄像头的使用小技 | 08-11 |
| 网络工程师 Linux系统日志的分析 | 08-08 |
| Ubuntu 7.04操作系统下安装Man在 | 07-27 |
| 从USB移动硬盘上引导Portable Li | 07-27 |
| Ghost程序参数四则 系统备份与恢 | 07-27 |
| 系统安全:分级防御对Linux服务器 | 07-24 |
| Linux操作系统中厉害的“七种武器 | 07-21 |
| 体系架构是不是桌面Linux系统的弱 | 07-19 |
| Linux系统的各种后门和日志工具详 | 07-19 |