Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在linux中加入文件?_Linux - Fatal编程技术网

如何在linux中加入文件?

如何在linux中加入文件?,linux,Linux,因此,我基本上有一个名为vendors的文件和另一个名为products的文件,我必须根据vendors代码加入它们,按顺序输出产品的代码、名称和供应商的名称,并将其附加到一个名为lab4.txt的文件中。该问题还要求“确保为文件供应商中的每个不成对行生成一行,并使用文本“不可用”替换不成对行的空字段”。我一直在尝试使用join命令来解决这个问题,但我能做得很好。以下是文件的外观: 供应商: 1201:Cromwell Interiors 1221:Design Extras Inc. 1320

因此,我基本上有一个名为vendors的文件和另一个名为products的文件,我必须根据vendors代码加入它们,按顺序输出产品的代码、名称和供应商的名称,并将其附加到一个名为lab4.txt的文件中。该问题还要求“确保为文件供应商中的每个不成对行生成一行,并使用文本“不可用”替换不成对行的空字段”。我一直在尝试使用join命令来解决这个问题,但我能做得很好。以下是文件的外观:

供应商:

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产品供应商

  • -a2
    打印文件2中不成对的行
  • -o 1.1,1.2,2.2
    输出格式为FILE1FIELD1:FILE1FIELD2:FILE2FIELD2
  • -e“不可用”
    将缺少的输入字段替换为“不可用”。要求还指定-o
  • -t':'
    使用分号作为列分隔符
  • -13-21
    基于文件1的第3列和文件2的第1列进行连接
  • 产品供应商
    要加入的文件;文件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)

  • -a1-a2
    告诉join打印两个文件中的所有行
  • -e“Not Available”
    告诉join将空字段替换为Not Available。不幸的是,出于某种原因,这是行不通的编辑-e仅在还指定了-o(输出格式)时有效
  • -t':'
    告诉join使用分号作为字段分隔符
  • -1 1
    告诉join使用文件1(供应商)中的字段编号1与文件2匹配
  • -23
    告诉join使用文件2(产品)中的字段编号3与文件1匹配
  • 供应商产品
    是要加入的两个文件,根据
    -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