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
他のルールを追加することもできます。1
1
print
awk -F '|' -v OFS='|' '$7 ~ /@/ { $7 = "" } 1' file
注:質問の(編集された)サンプル出力とは異なり、スクリプトはサンプル入力の最後の行から先行スペースを削除しません。