1

2 つのファイルがあり、3 番目のファイルを作成しようとしています。fileA には、数値の静的リストがあります。fileB には、数値の静的リストもあります。awk を使用して、fileB から数値を取得し、fileA を解析して、fileC を作成したいと考えています。FileC は、fileB から見たものを無視して fileA になります。

その他のファイル*

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

とても醜いです

4

3 に答える 3

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=

必要だと思いますが、目的の出力に表示されません。

于 2013-06-18T15:27:34.167 に答える
1

GNU シード

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=
于 2013-06-18T17:23:13.260 に答える