使用特定字段作为键加入
join using a specific field as key
我想在 section.dat
中找到与 "Database Engineering" 课程相对应的所有部分。为此,我想以课程号为键加入result1.dat
和section.dat
,只保留需要的字段,并将中间结果保存到名为result2.dat
.[=22的文件中=]
我已经创建了 result1.dat
文件,但我不确定用于将它与 section.dat
文件连接的 Unix 命令。我知道结果文件中我需要的行是第 4 行和第 5 行;我需要用作密钥的课程编号是 cs350
.
result1.dat
:
cs350#Database Engineering#3.0#math229
section.dat
:
1#cs110#2010#Spring#MWF#9:00#10:15
2#cs300#2009#Spring#TuTh#11:00#12:15
3#cs305#2009#Fall#MW#11:00#12:15
4#cs350#2009#Spring#TuTh#15:30#16:45
5#cs350#2010#Fall#MWF#15:00#15:50
6#cs440#2008#Fall#TuTh#14:00#15:15
7#math130#2008#Fall#MW#13:00#13:50
8#math229#2009#Spring#MTuWThF#9:00#9:50
9#math329#2010#Spring#MWF#9:00#10:15
我相信命令应该是这样的:
join (unsure of middle information) result1.dat section.dat > result2.dat
你必须告诉join
一些事情:
- 连接使用哪些字段([=14=第一个,
section.dat
第二个)
- 如何分隔字段(使用
#
)
- 加入后要保留哪些字段
命令如下所示,输出为:
$ join -t '#' -2 2 result1.dat section.dat
cs350#Database Engineering#3.0#math229#4#2009#Spring#TuTh#15:30#16:45
cs350#Database Engineering#3.0#math229#5#2010#Fall#MWF#15:00#15:50
-t '#'
定义字段分隔符,-2 2
告诉join
第二个文件中的相关字段是第二个。默认是第一个字段,所以我不必写 -1 1 -2 2
(但我可以写)。
如您所见,这将两条线连接在一起并删除了连接字段,因此它只出现一次。您可以 select 使用 -o
选项将哪些字段放入结果中;假设您只需要文件一的前两个字段和文件二的第三和第四字段,它将是 -o '1.1 1.2 2.3 2.4'
:
$ join -t '#' -2 2 -o '1.1 1.2 2.3 2.4' result1.dat section.dat
cs350#Database Engineering#2009#Spring
cs350#Database Engineering#2010#Fall
如您所知,要将结果存入新文件,您需要使用
join -t '#' -2 2 -o '1.1 1.2 2.3 2.4' result1.dat section.dat > result2.dat
我想在 section.dat
中找到与 "Database Engineering" 课程相对应的所有部分。为此,我想以课程号为键加入result1.dat
和section.dat
,只保留需要的字段,并将中间结果保存到名为result2.dat
.[=22的文件中=]
我已经创建了 result1.dat
文件,但我不确定用于将它与 section.dat
文件连接的 Unix 命令。我知道结果文件中我需要的行是第 4 行和第 5 行;我需要用作密钥的课程编号是 cs350
.
result1.dat
:
cs350#Database Engineering#3.0#math229
section.dat
:
1#cs110#2010#Spring#MWF#9:00#10:15
2#cs300#2009#Spring#TuTh#11:00#12:15
3#cs305#2009#Fall#MW#11:00#12:15
4#cs350#2009#Spring#TuTh#15:30#16:45
5#cs350#2010#Fall#MWF#15:00#15:50
6#cs440#2008#Fall#TuTh#14:00#15:15
7#math130#2008#Fall#MW#13:00#13:50
8#math229#2009#Spring#MTuWThF#9:00#9:50
9#math329#2010#Spring#MWF#9:00#10:15
我相信命令应该是这样的:
join (unsure of middle information) result1.dat section.dat > result2.dat
你必须告诉join
一些事情:
- 连接使用哪些字段([=14=第一个,
section.dat
第二个) - 如何分隔字段(使用
#
) - 加入后要保留哪些字段
命令如下所示,输出为:
$ join -t '#' -2 2 result1.dat section.dat
cs350#Database Engineering#3.0#math229#4#2009#Spring#TuTh#15:30#16:45
cs350#Database Engineering#3.0#math229#5#2010#Fall#MWF#15:00#15:50
-t '#'
定义字段分隔符,-2 2
告诉join
第二个文件中的相关字段是第二个。默认是第一个字段,所以我不必写 -1 1 -2 2
(但我可以写)。
如您所见,这将两条线连接在一起并删除了连接字段,因此它只出现一次。您可以 select 使用 -o
选项将哪些字段放入结果中;假设您只需要文件一的前两个字段和文件二的第三和第四字段,它将是 -o '1.1 1.2 2.3 2.4'
:
$ join -t '#' -2 2 -o '1.1 1.2 2.3 2.4' result1.dat section.dat
cs350#Database Engineering#2009#Spring
cs350#Database Engineering#2010#Fall
如您所知,要将结果存入新文件,您需要使用
join -t '#' -2 2 -o '1.1 1.2 2.3 2.4' result1.dat section.dat > result2.dat