内のフィールドに一致する行を削除します。各ファイルの行は同一ではありませんが、同一のフィールドのサブセットがあります。私は、file1の各行からフィールド3-5を取り込み、同じパターン(同じ3つのフィールド、file2の2番目から4番目のフィールド)にfile2を検索します。一致するものが見つかった場合は、file1から対応する行を削除します。のawk/sedの/ grepの私はいくつかの行(十)がFILE1、およびはるかに長いFILE2(〜50万ライン)を持っている別のファイル
例えば、FILE1:
2016-01-06T05:38:31 2016-01-06T05:23:33 2016006 120E A TM Current
2016-01-06T07:34:01 2016-01-06T07:01:51 2016006 090E B TM Current
2016-01-06T07:40:44 2016-01-06T07:40:41 2016006 080E A TM Alt
2016-01-06T07:53:50 2016-01-06T07:52:14 2016006 090E A TM Current
2016-01-06T08:14:45 2016-01-06T08:06:33 2016006 080E C TM Current
FILE2:(50万ライン用とオン)
2016-01-06T07:35:06.87 2016003 100E C NN Current 0
2016-01-06T07:35:09.97 2016003 100E B TM Current 6303
2016-01-06T07:36:23.12 2016004 030N C TM Current 0
2016-01-06T07:37:57.36 2016006 090E A TM Current 399
2016-01-06T07:40:29.61 2016006 010N C TM Current 0
...
したがって、この場合には、私は四行目を削除したいですfile1の(その場で)。
次は私が削除したい行見つける:
grep "$(awk '{print $3,$4,$5}' file1)" file2
をだから、一つの解決策は、これはsedのためにパイプにかもしれないが、私はパイプで連結された入力からのsedでの照合パターンを設定するかは不明です。そして、オンラインで検索するとawkはおそらくこのすべて(またはおそらくsedなど)を行うことができるので、きれいなソリューションがどのように見えるのか疑問に思うかもしれません。他のプロセスが、これが起こっている間に、ファイルを変更しようとする可能性があるため、
はまた、速度が(私はこれがより多くの合併症を提示することができる知っている...)やや重要です。一致は一般的に、最初からではなく、file2の最後にあります(file2を下から上に検索する方法がある場合)。
pluse-UNO任意のUNIXコマンドで
は、あなただけ行う元のファイルを上書きします。投稿と幸運を続けてください。 – shellter