AWK удаляет точки - PullRequest
       0

AWK удаляет точки

0 голосов
/ 06 февраля 2020

Все,

У меня вопрос по awk. У меня есть файл, и мне нужно распечатать текст. Ввод:

lunar 05.00.Hello
lunar 05.00.Mockingbird
lunar "/^05\\.00\\.hello\\.com$/"
lunar "/^05\\.00\\.stolen\\ Heart$/"
lunar "/^05\\.00\\.Reggie\\.Ton$/"

calendar "/^05\\.00\\.Reggie\\.Ton$/"
calendar "/^05\\.00\\.Rural\\.Ton$/"
montnly "/^05\\.00\\.hello\\.com$/"

вывод Я хочу:

Hello
Mockingbird
hello.com
stolen Heart
Reggie.Ton

, но с использованием awk

grep 'lunar' names.txt | awk -F. '{print $3,$4 }' | sed 's/[\/$"]/''/g' |sort | uniq > file2.txt

У меня есть этот вывод:

Hello
Mockingbird
hello com
stolen Heart
Reggie Ton

Я имею в виду, что точки исчезли. Как я могу изменить awk там? Спасибо.

Ответы [ 5 ]

3 голосов
/ 06 февраля 2020

Вы можете сделать это за один раз awk:

awk -F. '/lunar/{gsub(/[\\\/$"]/, ""); print $3 ($4 == "" ? "" : FS $4)}' file

Hello
Mockingbird
hello.com
stolen Heart
Reggie.Ton
2 голосов
/ 06 февраля 2020

awk не удаляет точки. Поскольку точка - это ваш разделитель, в этих строках больше нет точек. Что вы можете сделать, это добавить форматирование с помощью printf и напечатать точку между строками. Вам также нужно будет добавить \n, чтобы поставить новые строки (неявные в печатном виде). ​​

Также мне пришлось добавить условие if, чтобы учесть случаи, в которых есть только одно поле. Это не очень надежно, хотя, если у вас есть больше возможностей (вы не указываете), я могу помочь вам сделать его более общим и надежным.

grep 'lunar'  names.txt  | awk -F. '{if ($4!="") {printf("%s.%s\n",$3,$4)} else{ {printf("%s\n",$3)}}}' | sed 's/[\/$"]/''/g' |sort | uniq > file2.txt

Выход:

Hello
Mockingbird
hello.com
stolen Heart
Reggie.Ton
1 голос
/ 06 февраля 2020
$ awk '{gsub(/["\\/^$]/,"")} sub(/^lunar .{6}/,"")' file
Hello
Mockingbird
hello.com
stolen Heart
Reggie.Ton
1 голос
/ 06 февраля 2020

Вам не нужно делать grep|awk|sed....

awk '/lunar/{gsub(/\\\\/,"");sub(/[$].*/,"");sub(/lunar[^a-zA-Z]*/,"");print}' file
0 голосов
/ 06 февраля 2020

Я бы использовал следующее:

sed -n '/^lunar/{s@["/$\^]@@g;s/^lunar 05\.00\.//p}' | sort -u > file2.txt

Сначала он фильтрует строки, начинающиеся с "лунного", а затем удаляет специальные символы, которые нам не нужны, в наших выходных данных, чтобы каждая строка соответствовала одному и тому же формату. Затем удаляет ведущий «Лунный 05.00». из этих строк и печатается то, что осталось.

Вы можете попробовать здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...