ファイルから特定のフィールドのEメールアドレスのみを削除する方法は?

ファイルから特定のフィールドのEメールアドレスのみを削除する方法は?

7番目のフィールドのEメールアドレスのみを削除しようとしています。 sedを介してこれを試しましたが、削除したい列を選択/選択することはできません。 7番目のフィールドにあるすべてのメールアドレスを削除したいです。

入力ファイル:

980||||||[email protected]||77880|GB||0CA005D||
7980||||||[email protected]||5656|PO||69B88008BE||
100||||||[email protected]||31000|USA||0C5D||
101||||||||3100df0|CAN||0C5D||
570||||||[email protected]||5521123|RSA||B70F2||
080570||||||[email protected]||AV6777|OI||A005D||
1870||||||USA||5521123|RSA||B70F2||
 70||||||RABBIT||AV6777|OI||A005D||

出力:

980||||||||77880|GB||0CA005D||
7980||||||||5656|PO||69B88008BE||
100||||||||31000|USA||0C5D||
101||||||||3100df0|CAN||0C5D||
570||||||||5521123|RSA||B70F2||
080570||||||||AV6777|OI||A005D||
1870||||||USA||5521123|RSA||B70F2||
70||||||RABBIT||AV6777|OI||A005D||

これが私が達成しようとしているものですが、達成できないものです。

sed 's/,[a-z][0-9]\@[a-z][0-9]\.[a-z]//' file

ベストアンサー1

(質問に追加の要件を追加した後、スクリプトを編集しました。)

awk -F '|' -v OFS='|' '$7 ~ /@/ { $7 = "" } { print }' file

説明する:

-F '|' -v OFS='|'入力と出力フィールドの区切り記号設定条件付き:列7に含まれる
$7 ~ /@/操作:列@
{ $7 = "" }7を空の文字列に設定
{ print }無条件ジョブ:行印刷

スクリプトは、列7に含まれるすべての項目が@Eメールアドレスであり、そのEメールアドレスに属していない他のデータはないと仮定します。

Valentin Bajramiのコメントで述べたように、そのステートメントを省略し、暗黙のデフォルト動作()を持つ「常にtrue」条件であるのみを含むprint他のルールを追加することもできます。11print

awk -F '|' -v OFS='|' '$7 ~ /@/ { $7 = "" } 1' file

注:質問の(編集された)サンプル出力とは異なり、スクリプトはサンプル入力の最後の行から先行スペースを削除しません。

おすすめ記事