嗨,我有兩個相似的文件(都有3列)。我想檢查這兩個文件是否包含相同的元素(但以不同的順序列出)。首先我想用awk比較文件
"xyz" 0 0
"aba" 0 0
"xxx" 0 0
"abc" 1 1
我怎麼能做到這一點用awk只比較第一列
FILE1.TXT
"aba" 0 0
"abc" 0 1
"abd" 1 1
"xxx" 0 0
FILE2.TXT?我試圖看看,但我發現只有複雜的例子。如果我還想在比較中包括另外兩列呢?輸出應該給我匹配元素的數量。
嗨,我有兩個相似的文件(都有3列)。我想檢查這兩個文件是否包含相同的元素(但以不同的順序列出)。首先我想用awk比較文件
"xyz" 0 0
"aba" 0 0
"xxx" 0 0
"abc" 1 1
我怎麼能做到這一點用awk只比較第一列
FILE1.TXT
"aba" 0 0
"abc" 0 1
"abd" 1 1
"xxx" 0 0
FILE2.TXT?我試圖看看,但我發現只有複雜的例子。如果我還想在比較中包括另外兩列呢?輸出應該給我匹配元素的數量。
要打印普通元素在這兩個文件:
$ awk 'NR==FNR{a[$1];next}$1 in a{print $1}' file1 file2
"aba"
"abc"
"xxx"
說明:
NR
和FNR
是存儲的記錄總數和記錄當前文件的數量awk
變量(默認記錄是一行)。
NR==FNR # Only true when in the first file
{
a[$1] # Build associative array on the first column of the file
next # Skip all proceeding blocks and process next line
}
($1 in a) # Check in the value in column one of the second files is in the array
{
# If so print it
print $1
}
如果你要匹配的整行,然後使用$0
:
$ awk 'NR==FNR{a[$0];next}$0 in a{print $0}' file1 file2
"aba" 0 0
"xxx" 0 0
或特定的一組列:
$ awk 'NR==FNR{a[$1,$2,$3];next}($1,$2,$3) in a{print $1,$2,$3}' file1 file2
"aba" 0 0
"xxx" 0 0
由於awk腳本的解釋而特別投票,謝謝! – vfilby 2016-02-24 05:00:01
@iiSeymour如果在關聯數組中找到file2的第一個cloumn,如何打印file1的第二個cloumn? – 2017-03-06 06:26:37
要打印匹配元件的數量,這裏有一個使用方法awk
:
awk 'FNR==NR { a[$1]; next } $1 in a { c++ } END { print c }' file1.txt file2.txt
個
結果使用您的輸入:
3
如果你想添加額外的列(例如,列一,二,三層),使用pseudo-multidimensional array:
awk 'FNR==NR { a[$1,$2,$3]; next } ($1,$2,$3) in a { c++ } END { print c }' file1.txt file2.txt
結果使用你的輸入:
2
+1。由於OP的文件只有3列,所以使用'a [$ 0]'而不是'a [$ 1,$ 2,$ 3]'會更好。但是,任何文件中的任何不匹配的不可見尾隨空格都可能導致意外輸出。也許使用rtrim或gsub。 – 2013-06-03 21:15:39
像這樣使用它 - > za $ awk'FNR == NR {a [$ 1];下一步}!($ a中)END {print $ 1}'test.csv test2.csv打印不匹配的記錄。 – zee 2017-08-22 04:15:57
@zee:感謝您的投票,但您不需要您的「END」塊 – Steve 2017-08-22 05:36:48
http://theunixshell.blogspot.in/2012/12/i-have-two-files-file-1-conta ins-3.html – Vijay 2014-03-29 13:48:12