Bash 连接整个字段,而不是字段的第一个数字

Bash 连接整个字段,而不是字段的第一个数字,bash,sorting,join,padding,Bash,Sorting,Join,Padding,我的file1.csv如下所示: 99495 123346 1132013 99495,141 99495,138 123346,1 和file2.csv,如下所示: 99495 123346 1132013 99495,141 99495,138 123346,1 这两个文件都已使用以下命令进行排序: sort -t, -k1n file1_unsorted.csv > file1.csv sort -t, -k1n file2_unsorted.csv > file2.c

我的file1.csv如下所示:

99495
123346
1132013
99495,141
99495,138
123346,1
和file2.csv,如下所示:

99495
123346
1132013
99495,141
99495,138
123346,1
这两个文件都已使用以下命令进行排序:

sort -t, -k1n file1_unsorted.csv > file1.csv
sort -t, -k1n file2_unsorted.csv > file2.csv
我也尝试使用-k1g进行排序,但最终结果没有任何差异

当我在两个CSV的第一个字段上加入两个

join -t, -o 2.1 2.2 -1 1 -2 1 file1.csv file2.csv > joined.csv
我得到了错误:

join: file1.csv:2: is not sorted: 123346
join: file2.csv:3: is not sorted: 123346,1
对我来说,这似乎是“排序”程序按字段排序的问题,而“加入”程序在检查第一位数字的排序时试图加入。因为1小于9,所以表示数字没有排序。我猜用0填充数字会有用,但我不想这样做。我希望能够让join认识到排序是由整个字段完成的

请注意,当我尝试上述最低限度的工作示例时,即使sort-c抛出错误,也会发生连接。但是当我在我的(大的)实际数据集上尝试它时,我得到了我上面发布的错误


我在Windows 10上的Ubuntu WSL上使用的是join和sort的8.28版。

首先需要按字典顺序对文件进行排序,以
连接它们,然后在连接后按数字进行排序:

join -t, <(sort -b unsorted1.csv) <(sort -b unsorted2.csv) | LC_ALL=C sort -n

join-t,无法在v8.31中复制,您尝试过更新coreutils吗?按-b排序是唯一有效的方法。谢谢但是现在我想知道为什么在最小工作示例中,数字排序(n)或一般排序(g)不会导致问题。@MishalAhmed我相信它是偶然“起作用”的,因为示例文件中的行太少了。