簡體   English   中英

在Linux中逐字段比較兩個文件

[英]Comparing two files field by field in Linux

我試圖比較兩個文件(用逗號和空格分隔)使用3個字段(字段1,2,5從file1和1,2,5從file2)如果兩個文件匹配我想要file2的整個記錄​​連接到最后使用awk提交的file1。 例如file1:

1, 4, abebe, kebede, 25, 101, 42
1, 4, abebe, debebe, 42, 201, 47
1, 4, abebech, kebede, 17, 33, 57

文件2:

1, 4, abebe, kebede, 25, 101, 42
1, 4, Tesse, debo, 25, 101, 42
1, 4, derartu, tulu, 25, 101, 42

輸出:

42, 1, 4, abebe, kebede, 25, 101, 42
47, 1, 4, Tesse, debo, 25, 101, 42
57, 1, 4, derartu, tulu, 25, 101, 42

我是linux的新手....任何幫助都是適用的

我對問題的第一次閱讀有助於這個解決方案:

awk '{getline t < "file2"; split( t, a );
    if( a[1]a[2]a[5] == $1$2$5) print $NF",", t}' file1

但似乎問題實際上是:'給定file1 ,其中我們知道任何記錄,其中字段1,2和4是相同的,最后的字段也是相同的,找到file2所有行與相應的字段1,2和4,並輸出該行與file1的最后一個字段前置。 在這種情況下,丹尼斯給出的解決方案是有效的。

由於文件1中記錄1的字段1,2和5與文件2中的所有記錄匹配,因此我以相反的順序將文件列為參數,以獲得所需的輸出。

awk 'BEGIN {OFS = ", "} NR == FNR {a[$1, $2, $5] = $NF; next} $1 SUBSEP $2 SUBSEP $5 in a {print a[$1, $2, $5], $0}' file2 file1

NR == FNR塊形成一個循環,該循環將參數列表中首先出現的文件讀入數組。 當記錄號( NR )和文件記錄號( FNR )不再相等時,處理繼續到命名為第二個參數的文件。

在那里,檢查數組以查看兩個文件中的字段是否匹配。 如果是,則輸出相應的保存字段和當前記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM