基于列,文件1中的行不存在于文件2中

我有2个文件

文件1-IN.txt

08:43:22 IN 0xabc  
08:43:31 IN 0xdef  
08:54:45 IN 0xghi  
08:54:45 IN 0xjkl

文件2-OUT.txt

08:43:32 OUT 0xdef 
08:54:45 OUT 0xghi 
08:54:45 OUT 0xjkl

基本上,我正在对网络问题进行故障排除,IN.txt是进入的数据包,OUT.txt是出去的数据包,第3列是数据包代码,因此它应与同一事务中的数据包匹配。

我想知道所有没有匹配OUT数据包的IN数据包。

所需的输出:

08:43:22 IN 0xabc
wwwoo00mv 回答:基于列,文件1中的行不存在于文件2中

您可以使用for。

for i in $(cat IN.txt| awk '{print $3}'); do grep -i $i OUT.txt | wc -l; done

或更可读:

for i in $(cat IN.txt| awk '{print $3}'); do result=$(grep -i $i OUT.txt | wc -l);echo $i "|" $result; done

输出:

0xabc | 0

0xdef | 1

0xghi | 1

0xjkl | 1

注意:只匹配数据包,我没看时间,因为您想检查数据包,这似乎并不重要

,
#!/bin/bash

IN=$(awk -F " " '{print $3}' in.txt)
OUT=$(awk -F " " '{print $3}' out.txt)

for i in $IN
do
    flag=false
    for o in $OUT
    do
        if [[ "$i" == "$o" ]]; then
            flag=true
            break
        fi
    done

    if [[ $flag == false ]]; then
        echo "Cannot find packet: $i in out"
    fi
done

结果:

dingrui@gdcni:~/onie$ ./filter.sh 
Cannot find packet: 0xabc in out
,

您可以使用fgrep

$ cut -d' ' -f3 < OUT.txt > OUT.txt2
$ fgrep -v IN.txt -f OUT.txt2
08:43:22 IN 0xabc  
本文链接:https://www.f2er.com/3117733.html

大家都在问