特定の列.csvからXを含む行を削除する

特定の列.csvからXを含む行を削除する

現在、次の方法を使用して、以下を含むすべてのメールを削除します。EXAMPLE

sed -i '/EXAMPLE/d' newname.csv

EXAMPLEただし、これによりすべての列の行が削除されます。EXAMPLE2番目の列に含まれる行だけを削除したいと思います。列はタブで区切られます。 (下記例)

pa**s-***c.com  support@n**.com George Ka*****os    Athens  Athens  1****   GREECE

タブの問題のために試してみましたが、操作中に何も機能しなかったため、.txtを上書きし、列は次のようになります。

"pak**o.asia","jav***[email protected]","T**iq Ja**id","Rajan Pur","punjab","33***0","PAKISTAN"

答え1

grep -v '^[^\t]*\t[^\t]*EXAMPLE' <newname.csv >outfile

しかし、テキストを使用する必要があるかもしれません。<タブ>そこにある文字は、grep使用する文字によって異なります。

以下も同様ですsed。使用すると、-i特定のファイルシステムのセキュリティリスクが発生することに注意してください。

sed -i '/^[^\t]*\t[^\t]*EXAMPLE/d' ./file

それとも少し難しいかもしれません。

sed -i 'h;s/\t/\n/2;/\t.*EXAMPLE.*\n/d;g' ./file

コンマ付きのデータの例:

sed -i '/^[^,]*,[^,]*EXAMPLE/d' ./file

全行を削除EXAMPLE最初のカンマの後と別のコンマの前に発生します。

答え2

Perlを使用すると、次のように簡単にできます。

#!/usr/bin/perl;
use strict;
use warnings;

while (<>) {
    print unless ( split )[1] =~ m/EXAMPLE/;
}

これは固定されていない正規表現なので、置き換える必要があるかもしれませんm/^EXAMPLE$/

これは単に次のように表現できます。

perl -ne 'print unless ( split )[1] =~ m/^EXAMPLE$/';

答え3

これらの操作は、awkawkに内部ファイル編集機能がないことを除いて、実際に使いやすく理解しやすいです。

$ awk '$2 !~ /EXAMPLE/ {print $ALL}' old.csv > new.csv

関連情報