Bash Join 命令将分隔符插入第一个元素

Bash Join 命令将分隔符插入第一个元素

我有两个文件:

文件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/

相关内容