Text-Processing

Bash Join命令將分隔符插入第一個元素

  • March 17, 2022

我有兩個文件:

文件 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 在第一個命令中添加豎線?

看起來file1.txt有 CRLF 行尾。

為什麼要在第一個命令中加入管道?

因為它結合了2個文件,所以添加管道是數據|||| 從file2.txt


命令說明

-t \|: 取管 | 作為分隔符,為了便於閱讀,您可以更改-t"|"

-j 1 : 找到第 1 列的公共欄位,你可以刪除它以便於閱讀,因為預設加入也選擇了第 1 列

file1.txt file2.txt: 從 file1 獲取數據,然後合併到 file2


來自命令的值

數據價值
分隔符**-t**`
公共欄位**-j 1**510806153
FILE1(不包括公共欄位和第一個``)
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/

引用自:https://unix.stackexchange.com/questions/694720