sed之兩個檔案共有特徵行的合併輸出

2021-07-24 17:08:20 字數 1526 閱讀 5036

cat a.txt

01 12510101 4001

02 12310001 4002

03 12550101 4003

04 12610001 4004

05 12810001 4005

06 12310001 4006

07 12710001 4007

08 12310001 4008

09 12810101 4009

10 12510101 4010

11 12310001 4011

12 12610001 4012

13 12310001 4013

cat b.txt

a 12410101 2006/02/15 2009/01/31 4002

b 12310001 2006/08/31 2008/08/29 4001

c 12610001 2008/05/23 2008/05/22 4002

d 12810001 1992/12/10 1993/06/30 4001

e 12660001 1992/05/11 1993/06/01 4005

判斷 a.txt 檔案中第二個欄位的內容存在於 b.txt 檔案中的第二個字段的話就輸出該行,並把 b.txt 檔案中的兩個日期內容新增在該行後:

02 12310001 4002 2006/08/31 2008/08/29

04 12610001 4004 2008/05/23 2008/05/22

05 12810001 4005 1992/12/10 1993/06/30

06 12310001 4006 2006/08/31 2008/08/29

08 12310001 4008 2006/08/31 2008/08/29

11 12310001 4011 2006/08/31 2008/08/29

12 12610001 4012 2008/05/23 2008/05/22

13 12310001 4013 2006/08/31 2008/08/29

sed -rn 『/^[^0-9]/h;/^[0-9]/』 b.txt a.txt

[解析]

sed操作兩個檔案難度很大吧。今天學習到乙個新的思路,兩個檔案的差別還比較明顯,就是乙個是數字開頭,乙個是英文開頭,先把 b.txt 文字處理全部追加到 hold space 裡,因為是英文本母開頭的所以很好區分開。然後匹配到數字開頭的行,那就是 a.txt 檔案了,g 把 hold space 裡的內容追加到該行後,然後開始匹配,因為我們要的是第二個字段,所以通過小括號把第二個欄位取到,匹配 \n\n 後是否能匹配到 \2 的內容,這裡為什麼是 \n\n 的寫法呢?因為我們之前用的是 h 追加,hold space 裡當時是空的,追加去後第一行會是乙個空行,所以這裡寫兩個換行符來匹配,如果匹配成功就執行替換,把我們要的標記出的內容替換成一行,然後列印。

awk 『nr==fnr』 b.txt a.txt

[解析]

這裡用awk呢就方便很多。但是學習sed的思路。

bash對比兩個檔案取不同的行

sort 對比兩個檔案不同的行 cat file1.txt file2.txt sort uniq u more主要是用到uniq的功能 兩個檔案的並集 重複的行只保留乙份 cat file1 file2 sort uniq兩個檔案的交集 只留下同時存在於兩個檔案中的檔案 cat file1 fil...

求兩個整型陣列的非共有元素

題目描述 給定兩個整型陣列,要求找出不是兩者共有的元素。輸入 有兩行。第1行先給出正整數n n 20 隨後是n個整數,其間以空格分隔。第2行先給出正整數m m 20 隨後是m個整數,其間以空格分隔。輸出 僅一行。按照數字給出的順序輸出不是兩陣列共有的元素,數字間以空格分隔。題目保證至少存在乙個這樣的...

按行拼接兩個txt檔案的python實現

如果在mariadb中複製了一列到txt上,需要在每行後面追加乙個符號 f open 2.txt o open 2.txt w for line in f line2 str line.strip r n n o.write line2 這個 的效果是 2.txt 中內容中某一行是429491769...