使用awk解析两个忽略值的文件

使用awk解析两个忽略值的文件,awk,grep,Awk,Grep,我有两个文件,正在尝试制作第三个。在fileA中,我有一个静态的数字列表。在fileB中,我还有一个静态的数字列表。我想使用awk从fileB获取数字,通过fileA进行解析,然后创建fileC。FileC将是fileA,忽略它从fileB中看到的任何内容 更多文件* fileA 99882105030=10.10.2.3= 99882152121=10.10.2.3= 99882152122=10.10.2.3= 99882152123=10.10.2.3= 99882152124=10.1

我有两个文件,正在尝试制作第三个。在fileA中,我有一个静态的数字列表。在fileB中,我还有一个静态的数字列表。我想使用awk从fileB获取数字,通过fileA进行解析,然后创建fileC。FileC将是fileA,忽略它从fileB中看到的任何内容

更多文件*

fileA

99882105030=10.10.2.3=
99882152121=10.10.2.3=
99882152122=10.10.2.3=
99882152123=10.10.2.3=
99882152124=10.10.2.3=
99882278940=10.10.2.3=
99882278969=10.10.2.3=
99883340691=10.10.2.3=
99883349708=10.10.2.3=
99883349755=10.10.2.3=

fileB (numbers that should be ignored)

99882105030
99882152121
99882152122
99882152123

fileC (file created from output of fileA and fileB)

99882278940=10.10.2.3=
99882278969=10.10.2.3=
99883340691=10.10.2.3=
99883349708=10.10.2.3=
99883349755=10.10.2.3=
到目前为止,我已经尝试:

awk 'FNR==NR { a[$NF]; next } ($NF in a)' fileB fileA > fileC
没有运气。我知道我可以grep-v-E“99882105030 | 998821522121”。。。我很满意,但是这个文件可能会变得很大,我不想做for循环。有人要吗

perl -p -e 's:\n:\|:g' fileB |\
sed 's:^:grep -v -E ":g;s:|$:":g;s:$: fileA > fileC:g | sh

就是这么难看

它可以用
awk
来完成,但在这种情况下,我认为
grep-f
会起到解救作用:

$ grep -wvf fileB fileA
99882152124=10.10.2.3=
99882278940=10.10.2.3=
99882278969=10.10.2.3=
99883340691=10.10.2.3=
99883349708=10.10.2.3=
99883349755=10.10.2.3=
  • -v
    用于反向匹配
  • -f
    用于文件匹配
  • -w
    用于单词匹配
  • >fileC
    以备不时之需。我在没有重定向的情况下发布了代码,以直接显示输出
请注意,该行

99882152124=10.10.2.3=

没有出现在您想要的输出中,尽管我认为应该出现。

可以使用
awk
完成,但在这种情况下,我认为
grep-f
起到了解救作用:

$ grep -wvf fileB fileA
99882152124=10.10.2.3=
99882278940=10.10.2.3=
99882278969=10.10.2.3=
99883340691=10.10.2.3=
99883349708=10.10.2.3=
99883349755=10.10.2.3=
awk -F= 'NR==FNR{a[$1]++;next}!($1 in a)' fileB fileA > fileC
  • -v
    用于反向匹配
  • -f
    用于文件匹配
  • -w
    用于单词匹配
  • >fileC
    以备不时之需。我在没有重定向的情况下发布了代码,以直接显示输出
请注意,该行

99882152124=10.10.2.3=
没有出现在您想要的输出中,尽管我认为应该出现。

GNU-sed
awk -F= 'NR==FNR{a[$1]++;next}!($1 in a)' fileB fileA > fileC
…输出:

99882152124=10.10.2.3= 99882278940=10.10.2.3= 99882278969=10.10.2.3= 99883340691=10.10.2.3= 99883349708=10.10.2.3= 99883349755=10.10.2.3= 99882152124=10.10.2.3= 99882278940=10.10.2.3= 99882278969=10.10.2.3= 99883340691=10.10.2.3= 99883349708=10.10.2.3= 99883349755=10.10.2.3= 逗号分隔符 …输出:

99882152124=10.10.2.3= 99882278940=10.10.2.3= 99882278969=10.10.2.3= 99883340691=10.10.2.3= 99883349708=10.10.2.3= 99883349755=10.10.2.3= 99882152124=10.10.2.3= 99882278940=10.10.2.3= 99882278969=10.10.2.3= 99883340691=10.10.2.3= 99883349708=10.10.2.3= 99883349755=10.10.2.3=
;) 放得很好,确实很有魅力。所以大多数时候都习惯于使用awk和sed进行输入和输出解析。。。甚至使用awk作为grep:awk'/THIS_PATTERN/{print}'文件或awk'/忽略这本书/{print}读起来很好,它对你很有用。在awk中,它可以通过中给出的一些代码来完成,但我认为
grep
在这种情况下获胜是一种更强大、更简单的方法。事实上,这要容易得多;)放得很好,确实很有魅力。所以大多数时候都习惯于使用awk和sed进行输入和输出解析。。。甚至使用awk作为grep:awk'/THIS_PATTERN/{print}'文件或awk'/忽略这本书/{print}读起来很好,它对你很有用。在awk中,它可以通过中给出的一些代码来完成,但我认为
grep
在这种情况下获胜是一种更强大、更简单的方法。事实上,这是很多easier@munkeyoto您使用的是返回字符数的
$NF
。@munkeyoto您使用的是返回字符数的
$NF