我已經問過類似的問題,但沒有找到我正在尋找的確切答案,我爲冗餘道歉。我決定以不同的方式重新發布這個問題。我有兩個冗長的文件,每個文件都有一個空格分隔的兩列。逐行比較兩個文件的單列
我想消除具有在的fileA和FILEB匹配塔2(不管行數/列1),並輸出整個失配線到一個單獨的文件中的所有行。
文件:
1 AA
2 BB
3 CC
4 DD
5 EE
6 FF
7 GG
8 HH
文件B:
1 AA
2 BB
3 XX
4 XX
5 CC
6 DD
7 XX
8 FF
9 GG
10 XX
11 XX
12 HH
希望的輸出:
3 XX
4 XX
7 XX
5 EE
10 XX
11 XX
fedorqui建議我用awk的fileA的第二列存儲在數組中,然後通過fileB循環輸出符合以下條件的行:
- 塔1是存在於FILEB的fileA
但第2欄是不同
awk 'FNR==NR {a[$1]=$2; next} $1 in a && a[$1] != $2' fileA fileB
這是有幫助的,直到我的代碼遇到的fileA和FILEB之間在列2中的第一差異,那麼代碼將輸出所有以下行。
取而代之的是,我想到陣列從的fileA線由行第2列比較FILEB的第2列。一旦代碼遇到差異,它將從fileB輸出整個不匹配的行,然後將該數組的相同行與fileB的下一行進行比較。它繼續比較數組的相同行,輸出fileB的差異行直到找到匹配。如果代碼到達fileB的末尾並且找不到匹配,則從fileA輸出該行,移至該數組的下一行並繼續與fileB的每一行進行比較。這是可能的,或者比使用awk創建數組更容易嗎?
這讓我更親近,謝謝。然而,當我在我的真實fileA和fileB上運行這個時,我注意到有很多行在輸出中出現fileA和fileB之間沒有差異。許多這些行是重複的同一個字母(例如,CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC和################################## ##)。你知道爲什麼會發生這種情況嗎? – agrobins 2015-04-02 04:24:29
如果您從這兩個文件中提供新的示例數據,那麼我當然可以研究並提出修復建議。 – anubhava 2015-04-02 05:02:36
謝謝anubhava,fileA例如: – agrobins 2015-04-02 14:40:19