如何在linux中加入文件?
因此,我基本上有一个名为vendors的文件和另一个名为products的文件,我必须根据vendors代码加入它们,按顺序输出产品的代码、名称和供应商的名称,并将其附加到一个名为lab4.txt的文件中。该问题还要求“确保为文件供应商中的每个不成对行生成一行,并使用文本“不可用”替换不成对行的空字段”。我一直在尝试使用join命令来解决这个问题,但我能做得很好。以下是文件的外观: 供应商:如何在linux中加入文件?,linux,Linux,因此,我基本上有一个名为vendors的文件和另一个名为products的文件,我必须根据vendors代码加入它们,按顺序输出产品的代码、名称和供应商的名称,并将其附加到一个名为lab4.txt的文件中。该问题还要求“确保为文件供应商中的每个不成对行生成一行,并使用文本“不可用”替换不成对行的空字段”。我一直在尝试使用join命令来解决这个问题,但我能做得很好。以下是文件的外观: 供应商: 1201:Cromwell Interiors 1221:Design Extras Inc. 1320
1201:Cromwell Interiors
1221:Design Extras Inc.
1320:Piedmont Plastics Inc.
1340:Morgan Catering Service Ltd.
1350:Pullman Elevators
1360:Johnson Office Products
另一个名为products的文件:
S0107:Lobby Furniture:1201
S0109:Ballroom Specialties:1221
S0110:Poolside Carts:1320
S0130:Formal Dining Specials:1340
S0201:Reservation Logs:1410
结果应该是:
S0107:Lobby Furniture:Cromwell Interiors
S0109:Ballroom Specialties:Design Extras Inc.
S0110:Poolside Carts:Piedmont Plastics Inc.
S0130:Formal Dining Specials:Morgan Catering Service Ltd.
Not Available:Not Available:Pullman Elevators
Not Available:Not Available:Johnson Office Products
正确答案
嗯。下面是如何获得所需的输出
join-a2-o1.1,1.2,2.2-e“不可用”-t':'-13-21产品供应商
打印文件2中不成对的行-a2
输出格式为FILE1FIELD1:FILE1FIELD2:FILE2FIELD2-o 1.1,1.2,2.2
将缺少的输入字段替换为“不可用”。要求还指定-o-e“不可用”
使用分号作为列分隔符-t':'
基于文件1的第3列和文件2的第1列进行连接-13-21
要加入的文件;文件1是产品,文件2是供应商产品供应商
[larntz@dido:/home/larntz/temp$ join -a2 -o 1.1,1.2,2.2 -e "Not Available" -t':' -1 3 -2 1 products vendors
S0107:Lobby Furniture:Cromwell Interiors
S0109:Ballroom Specialties:Design Extras Inc.
S0110:Poolside Carts:Piedmont Plastics Inc.
S0130:Formal Dining Specials:Morgan Catering Service Ltd.
Not Available:Not Available:Pullman Elevators
Not Available:Not Available:Johnson Office Products
原始错误答案 考虑到您文章中的两个文件,这适用于JoinVersion8.30(ArchLinux)
告诉join打印两个文件中的所有行-a1-a2
告诉join将空字段替换为Not Available。不幸的是,出于某种原因,这是行不通的编辑-e仅在还指定了-o(输出格式)时有效-e“Not Available”
告诉join使用分号作为字段分隔符-t':'
告诉join使用文件1(供应商)中的字段编号1与文件2匹配-1 1
告诉join使用文件2(产品)中的字段编号3与文件1匹配-23
是要加入的两个文件,根据供应商产品
和-1
参数订购事宜李>-2
命令输出:
[larntz@dido:/home/larntz/temp$ join -a1 -a2 -e"Not Available" -t':' -1 1 -2 3 vendors products
1201:Cromwell Interiors:S0107:Lobby Furniture
1221:Design Extras Inc.:S0109:Ballroom Specialties
1320:Piedmont Plastics Inc.:S0110:Poolside Carts
1340:Morgan Catering Service Ltd.:S0130:Formal Dining Specials
1350:Pullman Elevators
1360:Johnson Office Products
1410:S0201:Reservation Logs
join
是正确的工具,展示您的尝试。-e
选项可用于在不匹配时提供默认的不可用的
文本。-a
选项用于为不成对的行生成输出行。@Barmar-e选项后面的语法是什么?:join-e products vendors>>lab4.txt您没有吗?真的..很抱歉,您几乎有了它,看,我要在问题中输入它应该是什么样子的结果。非常接近的想法更新了我的答案,以产生你想要的输出。我想这应该可以回答这个问题。我做到了,伙计,但是如果没有你的帮助,我肯定无法成功。下面是整个命令:join-o1.11.22.2-a2-t:-e'notavailable'-13-21产品供应商真棒!很高兴我能帮忙。
[larntz@dido:/home/larntz/temp$ join -a1 -a2 -e"Not Available" -t':' -1 1 -2 3 vendors products
1201:Cromwell Interiors:S0107:Lobby Furniture
1221:Design Extras Inc.:S0109:Ballroom Specialties
1320:Piedmont Plastics Inc.:S0110:Poolside Carts
1340:Morgan Catering Service Ltd.:S0130:Formal Dining Specials
1350:Pullman Elevators
1360:Johnson Office Products
1410:S0201:Reservation Logs