我有两个文件: FILE1 和 FILE2
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
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 :(得分:0)
查看unix命令uniq
http://unixhelp.ed.ac.uk/CGI/man-cgi?uniq
假设文件中有空格字符而不是标签 这样的事情可能会起作用
cat file1 file2 |排序| uniq -D -w6 | uniq> file3
抱歉,纠正了上述错误......
答案 1 :(得分:0)
while read user ip ; do match=`grep -E "$user " file2 2>/dev/null` ; if [ $? -eq 0 ] ; then echo $user $ip ; echo $match ; fi ; done < file1
user1 1.1.1.1
user1 99.22.54.214
user2 2.2.2.2
user2 2.2.2.2
user4 4.4.4.4
user4 8.8.8.8
答案 2 :(得分:0)
fgrep -h -f <(cut -d ' ' -f 1 FILE1 FILE2 | sort | uniq -d) FILE1 FILE2 | sort -k1
从两个文件中删除第一个字段,然后搜索重复项,然后在两个文件中搜索相关行。但你也可以用AWK在几个方面做到这一点......例如像是这样的事情:
awk '{if ( users[$1] = "" ) { users[$1]=$2 ; printed[$1]=0} else { if (printed[$1]==0) {print $1 users[$1] ; printed[$1]=1 ; print $0 } else { print $0 } }' | sort
当它第一次看到用户时,保存该行,然后在下一次(次)看到同一个用户时,检查是否已经打印了第一次出现,如果没有,则打印出第一次出现,然后是实际打印。如果第一次出现,则仅打印实际行。
HTH
答案 3 :(得分:0)
$ awk 'FNR==NR{a[$1]=$0;next}($1 in a){print $0;print a[$1]} ' file2 file1 | uniq
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
答案 4 :(得分:0)
这是我的尝试,它保留了一行内的空格。首先,创建一个名为showdup.awk的脚本:
# showdup.awk
$1 != lastkey {
# Flush out the last set: only print out if the last set contains
# more than one lines
if (count > 1) {
for (i = 0; i < count; i++) {
print savedLine[i]
}
}
# Reset the count
count = 0
}
{
savedLine[count++] = $0;
lastkey = $1;
}
接下来,调用showdup.awk:
cat file1 file2|sort|awk -f showdup.awk