linux - 为什么我无法在 Ubuntu 上加入这两个文件?

标签 linux file

这是我想要加入这两个文件的两个文件(其中一个是.txt,另一个是.tsv)

文件 1(.txt 文件):有两列

string_1  abc...
string_2  bcd...
string_3  cde...

文件 2(.tsv 文件):有两列

string_1  X...
string_2  Y...
string_3  Z...

我使用这个 linux 语句从命令行加入文件:

join -j 2 -o 1.1, 1.2, 1.3, 2.1 file.txt file.tsv

但是我在执行时收到此错误消息:

join: invalid file number in field spec: ‘’

最佳答案

看起来这里有几个问题。

首先,您要求 join 使用字段 2 (-j 2) 加入文件,但从您的输入数据看来,您实际上想加入字段 1。如果我获取您的示例输入并运行:

join -j 2 file1.txt file2.txt

我不会得到任何输出,因为没有可连接的行。将其与运行的输出进行比较:

join file1.txt file2.txt

结果是:

string_1 abc... X...
string_2 bcd... Y...
string_3 cde... Z...

接下来,您对 -o 的参数看起来是错误的。 -o 选项需要一个没有空格的单个参数,如下所示:

-o 1.1,1.2,1.3,2,1

如果我们使用它,我们会得到:

$ join -o '1.1,1.2,1.3,2.1' file1.txt  file2.txt
string_1 abc...  string_1
string_2 bcd...  string_2
string_3 cde...  string_3

但是这个论点仍然看起来是错误的,因为你的输入文件只 有两列,并且您试图引用第三列 第一个文件(1.3)。由于字段 1 是 两个输入,将 2.1 列包含在 输出(因为它将与 1.1 相同)。这让我们:

$ join -o '1.1,1.2,2.2' file1.txt  file2.txt
string_1 abc... X...
string_2 bcd... Y...
string_3 cde... Z...

这正是我们通过简单运行 join file1.txt 得到的结果 file2.txt 不带参数。

关于linux - 为什么我无法在 Ubuntu 上加入这两个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53669831/

相关文章:

linux - 如何在 Centos 7 上为 mongodb 禁用 THP

linux - 如何检测没有人在 Linux 中写入文件?

file - 批处理文件正则表达式以查找名称中带有数字的文件

c - 如何使用 C 将文件中的字节读入字符串和整数?

shell - 如何知道 mac 命令行上 open 命令的 -a 标志可使用哪些应用程序

mysql - 当数据库名称有 '-' 时遇到错误 DROP

linux - 用于UBIFS的新NAND分区

linux - Ansible服务器无法连接aws云主机

linux - 构建 SDK 时出现冲突请求错误

java - File.length 平台和文件系统是否独立