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操作系统实现的传真系统 | 12-09 | |
| Linux操作系统上最好的10款开源游 | 11-20 | |
| Linux 系统中的超级权限的控制 | 11-09 | |
| Linux操作系统下的常见系统资源共 | 11-07 | |
| Linux下的中文显示和支持常见问题 | 10-23 | |
| 嵌入式Linux系统的动态电源管理技 | 10-13 | |
| 从硬盘安装Linux操作系统的方法步 | 10-12 | |
| 深入浅出分析Linux设备驱动程序中 | 10-10 | |
| 使用kgdb调试linux内核及内核模块 | 10-04 | |
| 使用Linux 文本工具简化数据的提 | 10-04 | |
| 如何在Linux操作系统下检测内存泄 | 09-27 | |
| Linux内核编译菜单中相关选项的意 | 09-20 | |