我有两个文件,我正在尝试制作第三个文件。在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 | 99882152121”...到我心里的内容,但这个文件可能变得很大,我不想做一个for循环。任何人?
perl -p -e 's:\n:\|:g' fileB |\
sed 's:^:grep -v -E ":g;s:|$:":g;s:$: fileA > fileC:g | sh
太难看了
答案 0 :(得分:4)
awk -F= 'NR==FNR{a[$1]++;next}!($1 in a)' fileB fileA > fileC
答案 1 :(得分: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=
-v
用于反向匹配。-f
用于文件匹配。-w
进行单词匹配。> fileC
万一你需要它。我发布了没有此重定向的代码,直接显示输出。注意该行
99882152124=10.10.2.3=
没有出现在你想要的输出中,虽然我认为应该。
答案 2 :(得分:1)
sed -r 's#(.*)#/\1/d#' fileB | sed -f - 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=