2015-03-31 3053 views
0

我有兩個文件,每個文件有兩列用空格分隔。比較兩個文件的單列

我想找到列2在兩個文件中不相同的行,並將它們輸出到第三個文件。

文件答:

1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
2 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB 
3 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 
4 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
5 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 
6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 
7 GGGGGGGGGGGGGGGGGGGGGGGGGGGGGG 
8 HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH 

文件B:

1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
2 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB 
3 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 
4 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
5 WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW 
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
7 YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 
8 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 
9 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 
10 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 
11 GGGGGGGGGGGGGGGGGGGGGGGGGGGGGG 
12 HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH 

期望的輸出:

5 WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW 
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
7 YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 
8 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 

我假定要做到這一點是grep從文件A的各行中的最簡單的方法文件B,但我是bash的新手,無法弄清楚下一步。任何幫助是極大的讚賞!

回答

5

您可以使用awk此:

$ awk 'FNR==NR {a[$1]=$2; next} $1 in a && a[$1] != $2' fileA fileB 
5 WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW 
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
7 YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 
8 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 

它通過循環的第一個文件存儲在數組a[1st col] = 2nd col值。然後,它遍歷第二個文件並打印符合以下條件的行:

  • 第一列出現在第一個文件中。
  • 第二列值與第一個文件中的值不同。

若要將其存儲到一個新的文件,只是重定向命令將文件:

awk 'FNR==NR {a[$1]=$2; next} $1 in a && a[$1] != $2' fileA fileB > fileC 
                    ^^^^^^^