join 命令的自动格式如何工作?

join 命令的自动格式如何工作?

这是一个例子:

$ cat file1
hello
there
$ cat file2
some,very,long,line,hello,csv
some,very,long,line,nope,csv
$ join -t, -1 1 -2 5 file1 file2
hello,some,very,long,line,csv

这按照记录的方式工作:连接的字段被拉到左侧,并打印剩余的字段。

但我想要的输出是保留 CSV (file2) 列排序。我可以使用此命令完整打印 CSV,该命令明确列出了 CSV 字段编号:

join -t, -1 1 -2 5 -o $(head -n1 file2 | awk -F, '{print NF}' | xargs seq | sed 's/^/2./' | paste -d, -s) file1 file2

它打印:

some,very,long,line,hello,csv

想法为此,它join有一个auto格式。这是手册页join关于以下内容的宝贵内容-o FORMAT

如果 FORMAT 是关键字“auto”,则每个文件的第一行决定每行输出的字段数。

但是,我不知道这意味着什么,也不知道应该如何使用该格式auto

我尝试了这个,但没有得到任何与之前不同的结果:

$ join -t, -1 1 -2 5 -o auto file1 file2
hello,some,very,long,line,csv

一个天真的解释是我应该将必需的字段列出为每个文件的第一行,但这也是错误的。

所以,我的问题是,它是什么auto,我应该如何使用它?我可以用它来保留输入 CSV 的列顺序吗?

相关内容