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