我有两个文件:FILE1和FILE2: FILE1:
user1 1.1.1.1
user2 2.2.2.2
user3 3.14.14.3
user4 4.4.4.4
user5 198.222.222.222
FILE2
user1 99.22.54.214
user66 45.22.88.88
user99 44.55.66.66
user4 8.8.8.8
user39 54.54.54.54
user2 2.2.2.2
输出文件
user1 1.1.1.1
user1 99.22.54.214
user2 2.2.2.2
user4 4.4.4.4
user4 8.8.8.8
我尝试了for循环,但取得了特别的成功。 任何人都可以给我写一个代码吗? THX!
答案 0 :(得分:1)
我可能会遗漏一些东西,但我认为“排序独特”应该给出正确答案。
$ sort -u file1 file2
user1 1.1.1.1
user1 99.22.54.214
user2 2.2.2.2
user3 3.14.14.3
user39 54.54.54.54
user4 4.4.4.4
user4 8.8.8.8
user5 198.222.222.222
user66 45.22.88.88
user99 44.55.66.66
当然,除非您提供的输出文件是您期望的整个输出。由于你没有说明从输出中删除行,我假设你想要所有这些。
答案 1 :(得分:0)
请务必先放大文件,在这种情况下是file2
awk 'FNR==NR{a[$1]=$2;next}(a[$1]){if(a[$1]!=$2)print $1,$2 RS $1,a[$1];else print $1,$2}' OFS='\t' file2 file1
$ awk 'FNR==NR{a[$1]=$2;next}(a[$1]){if(a[$1]!=$2)print $1,$2 RS $1,a[$1];else print $1,$2}' OFS='\t' file2 file1
user1 1.1.1.1
user1 99.22.54.214
user2 2.2.2.2
user4 4.4.4.4
user4 8.8.8.8
或者,你可以使用它,但它需要两次调用awk
,因此性能不会那么快:
awk 'FNR==NR{a[$1]=$2;next}(a[$1]){print $1,$2 RS $1,a[$1]}' OFS='\t' file2 file1 | awk '!a[$0]++'