“加入-e”是什么意思?

“加入-e”是什么意思?

从 coreutils 的手册中得知join

-e string

将输入中缺少的输出字段替换为字符串。即,缺少使用 -12jo 选项指定的字段。

我根本不明白这个选项。以下内容是什么意思

  • “输入中缺少的输出字段”

  • “缺少用 -12jo 选项指定的字段”?

谢谢。

答案1

稍微神秘的字符串-12jo指的是四个单独的选项-1-2和,其中前三个与选择每个文件中要加入-j-o字段有关,最后一个与应输出每个文件中的哪些字段有关。该-j选项是 GNU 中的扩展join,并且与(其中是某个整数)-j n相同。-1 n -2 nn

当您使用 请求获取时,该-e选项生效-a未配对的您加入的一个或两个文件中的行。未配对的行将丢失数据,因为一个文件中的行与另一个文件中的行不对应。该-e选项用给定的字符串替换这些字段。同样,如果您使用 请求-o文件中特定行上不存在的字段,则可以使用-e字符串替换空值。

示例:两个文件包含多种产品的制造成本和销售收入。每个文件都有字段

  1. 产品编号
  2. 产品名称
  3. 一些数字
$ cat expenses.txt
1   teacup  5
2   spoon   7
3   bowl    10

$ cat sales.txt
1   teacup  30
2   spoon   24

为了得到费用所有产品的销售,同时替换字符串中可能丢失的数字(来自第一个或第二个文件)NONE,我会这样做

$ join -a1 -a2 -o0,1.2,1.3,2.3 -e NONE expenses.txt sales.txt
1 teacup 5 30
2 spoon 7 24
3 bowl 10 NONE

在这里,我使用该-a选项两次来请求两个文件中的所有行(SQL 中的“完全外连接”)。该-o选项用于从每个文件中获取特定字段(字段0是连接字段,默认情况下是每个文件中的第一个字段),并指定用于替换缺失值的-e字符串。NONE

正如您所看到的,我们得到的NONE是“销售价值”,因为第二个文件中没有提到 ID 为 3 的产品。

相关内容