Извлеките домен, затем вставьте в ту же строку, используя sed / awk / grep / perl - PullRequest
0 голосов
/ 30 апреля 2018

Я начал свое техническое приключение не так давно - как вы, наверное, поняли из вопроса - но теперь я застрял, потому что после почти целого дня размышлений и поисков я не знаю правильного решения своей проблемы.

Вкратце, я получил файл с тысячами строк, который содержит адрес электронной почты и имя. Дело в том, что мне действительно нужен еще один столбец с именем домена, например, рядом с адресом электронной почты. Пожалуйста, посмотрите на примеры ниже.

Вот как это выглядит сейчас:


    something@nothing.tld|:|george|-|
    anything@another.tld|:|thomas|-|
    third@address.tld|:|kelly|-|

Как я хотел выглядеть:


    something@nothing.tld|:|nothing.tld|--|george|-|
    anything@another.tld|:|another.tld|--|thomas|-|
    third@address.tld|:|address.tld|--|kelly|-|

Моим лучшим предположением было использование sed для запуска процесса и извлечения домена, но как мне вставить этот извлеченный домен в ту же строку, где я застрял.


    sed -e 's/.*@\(.*\)|:|*/\1/'

Если бы вы могли также дать краткое объяснение вместе с решением, которое было бы действительно полезным.

Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

Вы можете сделать это так с sed:

sed -E 's/@([^|]+)\|:\|/&\1|--|/' infile

Обратите внимание на использование отрицательной группы ([^|]), т. Е. Сопоставление с чем угодно, кроме этой группы символов.

Выход:

something@nothing.tld|:|nothing.tld|--|george|-|
anything@another.tld|:|another.tld|--|thomas|-|
third@address.tld|:|address.tld|--|kelly|-|
0 голосов
/ 30 апреля 2018

С GNU awk для gensub ():

$ awk 'BEGIN{FS=OFS="|"} {print $1, $2, gensub(/.*@/,"",1,$1), "--", $3, $4, $5}' file
something@nothing.tld|:|nothing.tld|--|george|-|
anything@another.tld|:|another.tld|--|thomas|-|
third@address.tld|:|address.tld|--|kelly|-|

С любым awk:

$ awk 'BEGIN{FS=OFS="|"} {d=$1; sub(/.*@/,"",d); print $1, $2, d, "--", $3, $4, $5}' file
something@nothing.tld|:|nothing.tld|--|george|-|
anything@another.tld|:|another.tld|--|thomas|-|
third@address.tld|:|address.tld|--|kelly|-|
0 голосов
/ 30 апреля 2018

Если у вас есть следующие данные в файле с именем, file1,

 something@nothing.tld|:|george|-|
 anything@another.tld|:|thomas|-|
 third@address.tld|:|kelly|-|

вы можете использовать : и @ в качестве разделителей и добавлять данные после них с помощью awk, а затем сохранять их в новый файл,

awk -F '[@:]' '{ print $1"@"$2 ":|" $2"--" $3 }' file1 > file2

Команда выше сохраняет следующие данные в файл с именем file2,

something@nothing.tld|:|nothing.tld|--|george|-|
anything@another.tld|:|another.tld|--|thomas|-|
third@address.tld|:|address.tld|--|kelly|-|
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...