我有两个文件:
文件1.txt:
510806153|1||||33245|65|6236067806|25001|7746250
510806153|1||||33245|65|6968349321|25001|8956584
文件2.txt
510806153|||||
当我这样做时join -t \| -j 1 file1.txt file2.txt
,我得到这个输出:
|||||6153|1||||33245|65|6236067806|25001|7746250
|||||6153|1||||33245|65|6968349321|25001|8956584
但是当我这样做时join -t \| -j 1 file2.txt file1.txt
,我得到了正确的连接:
510806153||||||1||||33245|65|6236067806|25001|7746250
510806153||||||1||||33245|65|6968349321|25001|8956584
为什么 join 在第一个命令中添加竖线?
答案1
它看起来像file1.txt
有 CRLF 行结尾。
答案2
为什么 join 在第一个命令中添加管道?
因为它合并了2个文件,所以添加管道是数据||||从file2.txt
命令说明
-t \|
: 取管 |作为分隔符,为了便于阅读,您可以更改-t"|"
-j 1
:找到第1列的公共字段,可以删除这个方便阅读,默认加入也选择了第1列
file1.txt file2.txt
:从file1中获取数据然后合并到file2
来自命令的值
数据 | 价值 |
---|---|
分隔符-t | | |
共同领域-j 1 | 510806153 |
FILE1(排除公共字段和第一个| ) |
1||||33245|65|6236067806|25001|7746250 1||||33245|65|6968349321|25001|8956584 |
FILE2(排除公共字段和第一个| ) |
|||| |
现在让我们看看数据是如何工作的
1. 命令=join -t \| -j 1 file1.txt file2.txt
输出= Common Field
+ Delimiter
+ FILE1
+ Delimiter
+FILE2
输出= 510806153
+ |
+ 1||||33245|65|6236067806|25001|7746250...
+ |
+||||
输出=
510806153|1||||33245|65|6236067806|25001|7746250|||||
510806153|1||||33245|65|6968349321|25001|8956584|||||
笔记 :看起来你的输出命令 1 是错误的或者因为 StackEchange 格式化
2. 命令=join -t \| -j 1 file2.txt file1.txt
输出= Common Field
+ Delimiter
+ FILE2
+ Delimiter
+FILE1
输出= 510806153
+ |
+ ||||
+ |
+1||||33245|65|6236067806|25001|7746250...
输出=
510806153||||||1||||33245|65|6236067806|25001|7746250
510806153||||||1||||33245|65|6968349321|25001|8956584
有关更多详细信息和示例:https://www.geeksforgeeks.org/join-command-linux/