加入整个字段而不是字段的第一位数字
Join on whole field instead of first digit of field
我有 file1.csv 看起来像这样:
99495
123346
1132013
和 file2.csv 看起来像这样:
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
对我来说,这似乎是 'sort' 程序按 字段 排序的问题,而 'join' 程序在检查排序时尝试加入第位。由于 1 小于 9,因此表示数字未排序。我猜想用 0 填充数字会起作用,但我不想那样做。我希望能够加入以识别整个领域已经完成排序。
请注意,当我尝试上面的最小工作示例时,即使 sort -c 抛出错误,连接也确实发生了。但是当我在我的(大型)实际数据集上尝试它时,我得到了上面 post 的错误。
我在 Windows 10.
Ubuntu WSL 上使用 8.28 版本的连接和排序
首先你需要将文件按字典顺序排序为join
,然后在加入后按数字sort
排序:
join -t, <(sort -b unsorted1.csv) <(sort -b unsorted2.csv) | LC_ALL=C sort -n
LC_ALL=C
可能是必需的,因为 ,
在某些语言环境中用作小数点字符,而在其他语言环境中可能用作数字分组字符。
我有 file1.csv 看起来像这样:
99495
123346
1132013
和 file2.csv 看起来像这样:
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
对我来说,这似乎是 'sort' 程序按 字段 排序的问题,而 'join' 程序在检查排序时尝试加入第位。由于 1 小于 9,因此表示数字未排序。我猜想用 0 填充数字会起作用,但我不想那样做。我希望能够加入以识别整个领域已经完成排序。
请注意,当我尝试上面的最小工作示例时,即使 sort -c 抛出错误,连接也确实发生了。但是当我在我的(大型)实际数据集上尝试它时,我得到了上面 post 的错误。
我在 Windows 10.
Ubuntu WSL 上使用 8.28 版本的连接和排序首先你需要将文件按字典顺序排序为join
,然后在加入后按数字sort
排序:
join -t, <(sort -b unsorted1.csv) <(sort -b unsorted2.csv) | LC_ALL=C sort -n
LC_ALL=C
可能是必需的,因为 ,
在某些语言环境中用作小数点字符,而在其他语言环境中可能用作数字分组字符。