使用Unix连接文件
我正在尝试加入三个文件。我大致知道怎么做。我需要加入2,然后把那个加入第三个。我的问题是我非常确定我需要使用-j和-o,但我不确定如何使用它们。这是我需要加入的三个文件有人能帮我吗使用Unix连接文件,unix,join,Unix,Join,我正在尝试加入三个文件。我大致知道怎么做。我需要加入2,然后把那个加入第三个。我的问题是我非常确定我需要使用-j和-o,但我不确定如何使用它们。这是我需要加入的三个文件有人能帮我吗 LN.txt Jones:John Kelly:Mary Adams:Betty Reich:Richard PH.txt Jones:905-555-1212 Kelly:416-555-2424 Adams:416-555-5757 Reich:905-555-8989 AD.txt Jones:Toront
LN.txt
Jones:John
Kelly:Mary
Adams:Betty
Reich:Richard
PH.txt
Jones:905-555-1212
Kelly:416-555-2424
Adams:416-555-5757
Reich:905-555-8989
AD.txt
Jones:Toronto
Kelly:Calgary
Adams:Calgary
Reich:Toronto
显然,我只需要使用他们的姓氏一次。试试这个,您可以更改文件的顺序以满足您的需要:
join -t':' LN.txt PH.txt | join -t':' - AD.txt > outputFile.txt
根据@Jonathan Leffler的建议,在bash中添加以下内容以处理未排序的文件:
join -t':' <(sort LN.txt) <(sort PH.txt) | join -t':' - <(sort AD.txt)
join-t':“使用join
有一个很好的解决方案。这是一个参考,您可以使用awk
作为您选择的工具来实现相同的功能
$ awk -F: '{
names[$1] = ((names[$1]) ? names[$1] : "")FS $2
}
END {
for(n in names)
print n names[n]
}' LN.txt PH.txt AD.txt
Jones:John:905-555-1212:Toronto
Kelly:Mary:416-555-2424:Calgary
Adams:Betty:416-555-5757:Calgary
Reich:Richard:905-555-8989:Toronto
join
的输入必须在join字段上排序,至少是为了可靠的操作。同意,我将添加这一点。谢谢对于给定的数据,如果联接列在每个文件中的顺序相同,则上面的联接
序列有效(至少在Mac OS X 10.9.2上有效)。对于Bash,join-t:非常感谢,我是否可以使用-j和-o,这只是一种不同的方式,或者它们都是不需要的?@Kalkrin--j
用于连接特定字段,而-o
用于格式化输出。它们很有用,但在您的特定情况下不是必需的-t
是必需的,因为您的输入将:
作为字段分隔符。你可以阅读更多关于Join的内容,并尝试使用它来更好地理解它?这很重要,因为Bash拥有其他shell没有的功能,这使得命令更容易正确工作。