• Описание к эхам

    From Dmitriy Orlov@2:5090/958 to All on Tue Jan 18 22:22:30 2022
    Hello All.

    Парни, хелпните плиз!

    Есть файл со списом эх без описаний. Хочу сделать чтоб при запросе %avail отдавался спосок эх с описанием. Для этого он мне нужен в формате:

    ECHO.TAG "описание"

    В фэхе XOFCHUBSLIST нашел список эх с узла 2:5020/830 где большинство описаний есть, вот теперь надо как-то сопоставить эти файлы.

    Своим умом я допёр что без grep тут не обойдётся и сделал:

    grep -i -f echos.txt ech00830.avl

    Hо как и ожидалось в выводе я получил кучу лишних эх которые попали под маску. То есть если в файле echos.txt была эха RU.CARS, то в вывод у меня попал не только RU.CARS но и RU.CARS.AUDI, RU.CARS.BMW и тд..

    Подскажите как в этом случае соринетировать grep на поиск?

    Dmitriy

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Nil A@2:5015/46 to Dmitriy Orlov on Tue Jan 18 21:30:46 2022
    Hello, Dmitriy!

    Tuesday January 18 2022 22:22, from Dmitriy Orlov -> All:

    grep -i -f echos.txt ech00830.avl
    Hо как и ожидалось в выводе я получил кучу лишних эх которые попали
    под маску. То есть если в файле echos.txt была эха RU.CARS, то в вывод
    у меня попал не только RU.CARS но и RU.CARS.AUDI, RU.CARS.BMW и тд..

    sed 's/\(.*\)/^\1\\s/' echos.txt >echos_regexp.txt
    grep -i -f echos_regexp.txt ech00830.avl

    Best Regards, Nil
    --- GoldED+/LNX 1.1.5
    * Origin: Linux 2.6.32-042stab145.3 (2:5015/46)
  • From Dmitriy Orlov@2:5090/958 to Nil A on Thu Jan 20 19:49:40 2022

    18 Jan 22, Nil A wrote to Dmitriy Orlov:

    grep -i -f echos.txt ech00830.avl
    Hо как и ожидалось в выводе я получил кучу лишних эх которые
    попали под маску. То есть если в файле echos.txt была эха
    RU.CARS, то в вывод у меня попал не только RU.CARS но и
    RU.CARS.AUDI, RU.CARS.BMW и тд..
    sed 's/\(.*\)/^\1\\s/' echos.txt >echos_regexp.txt
    grep -i -f echos_regexp.txt ech00830.avl
    Получилось! Спасибо!
    Только из вывода пропали эхи, которые есть в echos.txt, но которых нет в ech00830.avl :)

    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Nil A@2:5015/46 to Dmitriy Orlov on Thu Jan 20 19:30:06 2022
    Hello, Dmitriy!

    Thursday January 20 2022 19:49, from Dmitriy Orlov -> Nil A:

    grep -i -f echos.txt ech00830.avl
    Hо как и ожидалось в выводе я получил кучу лишних эх которые
    попали под маску. То есть если в файле echos.txt была эха
    RU.CARS, то в вывод у меня попал не только RU.CARS но и
    RU.CARS.AUDI, RU.CARS.BMW и тд..
    sed 's/\(.*\)/^\1\\s/' echos.txt >echos_regexp.txt
    grep -i -f echos_regexp.txt ech00830.avl
    Получилось! Спасибо!
    Только из вывода пропали эхи, которые есть в echos.txt, но которых нет
    в ech00830.avl :)

    Тогда твоя задача решается вообще без grep, а с join.

    sort echos.txt | join -i -a1 - ech00830.avl

    Best Regards, Nil
    --- GoldED+/LNX 1.1.5
    * Origin: Linux 2.6.32-042stab145.3 (2:5015/46)
  • From Dmitriy Orlov@2:5090/958 to Nil A on Fri Jan 21 09:21:25 2022

    20 Jan 22, Nil A wrote to Dmitriy Orlov:

    sed 's/\(.*\)/^\1\\s/' echos.txt >echos_regexp.txt
    grep -i -f echos_regexp.txt ech00830.avl
    Получилось! Спасибо!
    Только из вывода пропали эхи, которые есть в echos.txt, но
    которых нет в ech00830.avl :)
    Тогда твоя задача решается вообще без grep, а с join.
    sort echos.txt | join -i -a1 - ech00830.avl
    Йес! То что надо! Спасибо, ты настоящий друг!

    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Dmitriy Orlov@2:5090/958 to Nil A on Fri Jan 21 20:42:15 2022

    18 Jan 22, Nil A wrote to Dmitriy Orlov:

    grep -i -f echos.txt ech00830.avl
    Hо как и ожидалось в выводе я получил кучу лишних эх которые
    попали под маску. То есть если в файле echos.txt была эха
    RU.CARS, то в вывод у меня попал не только RU.CARS но и
    RU.CARS.AUDI, RU.CARS.BMW и тд..
    sed 's/\(.*\)/^\1\\s/' echos.txt >echos_regexp.txt
    А как можно взять в "" описание эхи?
    Чтоб было вот так:

    ECHO.TAG "описание"

    А то фаста без кавычек теряет некоторые буквы в описаниях. Я правда пытался сам разобраться, весь вечер читал доку по regexp, начитался и сделал вот так

    sed s/\( .*$\)/"\1\"/ ech00830.avl

    Получил вот это:

    === Cut ===
    1072.COMPNEWS" Hовости компьютеpного миpа"
    1072.COMPNEWS.TALK" Обсуждение новостей по компьютерам"
    10TH_AMD" 10th Amendment Echo"
    1200.PVT" Локалка MSX Vision"
    1200.ROBOTS
    1200.ROBOTS.OS2
    1200.ROBOTS.PIC
    === Cut ===

    Уже почти, но пробел попадает в кавычки..

    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Nil A@2:5015/46 to Dmitriy Orlov on Sat Jan 22 00:26:50 2022
    Hello, Dmitriy!

    Friday January 21 2022 20:42, from Dmitriy Orlov -> Nil A:

    sed 's/\(.*\)/^\1\\s/' echos.txt >echos_regexp.txt
    А как можно взять в "" описание эхи?
    Чтоб было вот так:
    ECHO.TAG "описание"
    sed s/\( .*$\)/"\1\"/ ech00830.avl

    ech00830.avl файл в DOS формате, т.е. с <CR><NL> и тут линуксовый sed .* в конце строки хватает этот самый <CR> или \r или 0x0D символ, я бы его просто вырезал сначала.

    Объединяю с моим предыдущим "inner join".

    sort echos.txt | join -i -a1 - ech00830.avl | sed -e 's/\r//; s/^\(\S\+\s\+\)\(.*\)$/\1"\2"/'

    о на деле, нет смысла расставлять кавычки, если там нет пробелов, так что вот так красивее

    sort echos.txt | join -i -a1 - ech00830.avl | sed -e 's/\r//; s/^\(\S\+\s\+\)\(\S\+\s\+.*\)$/\1"\2"/'

    Best Regards, Nil
    --- GoldED+/LNX 1.1.5
    * Origin: Linux 2.6.32-042stab145.3 (2:5015/46)
  • From Dmitriy Orlov@2:5090/958 to Nil A on Sun Jan 23 16:43:21 2022
    Hello Nil!

    22 Jan 22, Nil A wrote to Dmitriy Orlov:

    о на деле, нет смысла расставлять кавычки, если там нет пробелов, так
    что вот так красивее
    sort echos.txt | join -i -a1 - ech00830.avl | sed -e 's/\r//; s/^\(\S\+\s\+\)\(\S\+\s\+.*\)$/\1"\2"/'
    Попробовал, получилось! Теперь всё как у бабы Кати в трусах! Спасибо!

    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Dmitriy Orlov@2:5090/958 to Nil A on Thu Jan 27 22:41:38 2022
    Hello Nil!

    22 Jan 22, Nil A wrote to Dmitriy Orlov:

    Объединяю с моим предыдущим "inner join".
    sort echos.txt | join -i -a1 - ech00830.avl | sed -e 's/\r//; s/^\(\S\+\s\+\)\(.*\)$/\1"\2"/'
    о на деле, нет смысла расставлять кавычки, если там нет пробелов, так
    что вот так красивее
    sort echos.txt | join -i -a1 - ech00830.avl | sed -e 's/\r//; s/^\(\S\+\s\+\)\(\S\+\s\+.*\)$/\1"\2"/'

    В общем я увлёкся сабжем и решил создать файл с описанием ваще всех эх со всех линков :-\ Потом сделать этот файл доступным фидошной общественности, вдруг кому-то пригодится :)

    Чтоб начать мне надо понимать к каким именно эхам у меня нет описания.

    Вот например мой файл с описаниями:

    === Cut ===
    MO.CARS "Эха Московских автомобилистов"
    MO.CARS.AUDIO "Все об авто-аудиоаппаратуре"
    MO.CARS.AUDI_VW "Общение владельцев AUDI и VolskWagen"
    MO.CARS.NIVA "Вcе об автомобилях Hива"
    MO.CARS.OKA "Все об автомобиле ОКА"
    RU.CARS.LADA "Автомобили ВАЗ" === Cut ===

    Вот файл от линка:

    === Cut ===
    ru.cars
    ru.cars.daewoo
    ru.cars.lada
    === Cut ===

    Как получить в вывод эху ru.cars.daewoo ?

    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Michael Dukelsky@2:5020/1042 to Nil A on Thu Jan 27 20:16:52 2022
    Привет, Nil!

    27 January 2022 22:41, Dmitriy Orlov послал(а) письмо к Nil A:

    Объединяю с моим предыдущим "inner join".
    sort echos.txt | join -i -a1 - ech00830.avl | sed -e 's/\r//;
    s/^\(\S\+\s\+\)\(.*\)$/\1"\2"/'
    о на деле, нет смысла расставлять кавычки, если там нет пробелов,
    так что вот так красивее sort echos.txt | join -i -a1 -
    ech00830.avl | sed -e 's/\r//;
    s/^\(\S\+\s\+\)\(\S\+\s\+.*\)$/\1"\2"/'

    В общем я увлёкся сабжем и решил создать файл с описанием ваще всех эх
    со всех линков :-\ Потом сделать этот файл доступным фидошной общественности, вдруг кому-то пригодится :)

    Чтоб начать мне надо понимать к каким именно эхам у меня нет описания.

    Вот например мой файл с описаниями:

    === Cut ===
    MO.CARS "Эха Московских автомобилистов"
    MO.CARS.AUDIO "Все об авто-аудиоаппаратуре"
    MO.CARS.AUDI_VW "Общение владельцев AUDI и VolskWagen"
    MO.CARS.NIVA "Вcе об автомобилях Hива"
    MO.CARS.OKA "Все об автомобиле ОКА"
    RU.CARS.LADA "Автомобили ВАЗ" === Cut ===

    Вот файл от линка:

    === Cut ===
    ru.cars
    ru.cars.daewoo
    ru.cars.lada
    === Cut ===

    Как получить в вывод эху ru.cars.daewoo ?

    Ты попался. :)

    Желаю успехов, Nil!
    За сим откланиваюсь, Michael.

    ... node (at) f1042 (dot) ru
    --- GoldED+/LNX 1.1.5-b20180707
    * Origin: ==<<.f1042.ru.>>== (2:5020/1042)
  • From Nil A@2:5015/46 to Michael Dukelsky on Thu Jan 27 20:35:30 2022
    Hello, Michael!

    Thursday January 27 2022 20:16, from Michael Dukelsky -> Nil A:

    Как получить в вывод эху ru.cars.daewoo ?
    Ты попался. :)

    У меня на ноде я решаю похожие задачи питоном.
    1. Он умеет отправлять всем моим линкам %list через txt2pkt.
    2. Далее он умеет парсить ответ от всех мне известных типов AreaFix, примерно вот так происходит ветвление
    pHpt = re.compile(r'^--- hpt(?:/\S+)? (\S+) (\S+) areafix')
    pJnode = re.compile(r'^--- jNode ver. (\S+)')
    pFidogate = re.compile(r'^--- FIDOGATE (\S+)')
    pSqafix = re.compile(r'^--- SqaFix (\S+)')
    pPartoss = re.compile(r'^--- ParToss (\S+)')
    pFmail = re.compile(r'From : FMail AreaMgr')
    pAreafixService = re.compile(r'From : Areafix Service') # 2:5020/4441
    Он также парсит подписан/неподписан, и может сравнить с моим конфигом - я использую для проверки когерентности.
    Он также парсит все названия эх, если линк это предоставляет
    3. Далее, я беру "кашерные" описания из файлов echo50.lst, подставляю префикс "2:50 Bone:" для них. Кстати, у меня есть функция, которая сравнивает пришедший по файлэхе echo50.lst с текущей подпиской и отправляет подписку на недостающие эхи.
    Также беру кашерные echo5020.lst и echo5030.lst
    4. Компилирую свой список эх - приоритет описания в echo50.lst/echo5020.lst/echo5030.lst, далее если кто-то из линков добавил описание, но только если это не comment in ('Description missing', 'Эха как эха...', 'Без описания', '<none>', 'Unknown', '?')
    Если всё равно ни каких описаний не осталось, то компилирую из префикса и постфикса, вот пример:

    prefix2Addr = (
    ('10.', '2:5034/10'),
    ('101.', '2:5020/101'),
    ('1042.', '2:5020/1042'),
    ('1048.', '2:5030/1048'),
    ('1081.', '2:5030/1081'),
    ('1100.', '2:461/1100'),
    ('115.', '2:5030/115'),
    ('1641.', '2:5020/1641'),
    ('2.5083.', '2:5083'),
    ('29.', '2:5021/29'),
    ('400.', '2:5020/400'),
    ('4441.', '2:5020/4441'),
    ('5015-255.', '2:5015/255'),
    ('5020-723.', '2:5020/723'),
    ('5030-1474.', '2:5030/1474'),
    ('5030-722.', '2:5030/722'),
    ('5030.230.', '2:5030/230'),
    ('5030.87.', '2:5030/87'),
    ('53.', '2:5053/58'),
    ('54.', '2:5053/54'),
    ('58.', '2:5053/58'),
    ('59.', '2:463/59'),
    ('6666.', '2:463/6666'),
    ('68.', '2:463/68'),
    ('715.', '2:5020/715'),
    ('888.', '2:467/888'),
    ('altyn.', '2:5020/570'),
    ('angarsk.', '2:6070'),
    ('bel.', '2:45'),
    ('brest.', '2:454'),
    ('bryansk.', '2:6001'),
    ('bukovina.', '2:4626'),
    ('cherkassy.', '2:4635'),
    ('chernigov.', '2:4634'),
    ('concord', '2:5053/51'),
    ('concord.', '2:5053/51'),
    ('crimea.', '2:460'),
    ('dn.', '2:464'),
    ('dnz.', '2:4646'),
    ('donbass.', '2:4647'),
    ('edgecity.', '2:5030/115'),
    ('edgecity.ii.', '2:5030/1115'),
    ('esp.', '2:343/107'),
    ('gremlin.', '2:5020/545'),
    ('grumbler.', '2:5080/102'),
    ('hobbit.', '2:5023/24'),
    ('hole.', '2:5010/352'),
    ('houston.', '2:4624'),
    ('ip.', '2:466/50'),
    ('kazan.', '2:5049'),
    ('kharkov.', '2:461'),
    ('kiev.', '2:463'),
    ('klg.', '2:5023/24'),
    ('komi.', '2:5003'),
    ('kos.', '2:5034'),
    ('lorapvt.', '2:460/58'),
    ('middle.range.rockets', '2:5053'),
    ('mo.', '2:5020'),
    ('moldova.', '2:469'),
    ('mu.', '2:5080'),
    ('mun.', '2:5031'),
    ('nikolaev.', '2:466'),
    ('nino.', '2:5015'),
    ('nodex.', '2:5020/848'),
    ('novgorod.', '2:5032'),
    ('nozdr.', '2:5020/2613'),
    ('nsk.', '2:5000'),
    ('odessa.', '2:467'),
    ('pavlograd.', '2:4647'),
    ('pclovers.', '2:5059/38'),
    ('perm.', '2:5054'),
    ('pskov.', '2:5033'),
    ('pushkin.', '2:5020/2140'),
    ('pvt.2.5083.21.', '2:5083/21'),
    ('pvt.dionizov.', '2:463/1104'),
    ('r46.', '2:46'),
    ('r46fe.', '2:46 fileecho'),
    ('rnd.', '2:5061'),
    ('rndfido.', '2:5061'),
    ('roo.', '2:5020/1042'),
    ('rss.', '2:5020/545'),
    ('simbirsk.', '2:5051'),
    ('solovey.', '2:5030/2104'),
    ('spb.', '2:5030'),
    ('tdh.', '2:5031/71'),
    ('tg.', 'Telegram'),
    ('titanic.', '2:5020/830'),
    ('tsk.', '2:5005'),
    ('tula.', '2:5022'),
    ('tver.', '2:5021'),
    ('ukhta.', '2:5097'),
    ('vladimir.', '2:5024'),
    ('vorkuta.', '2:5003'),
    ('wit.', '2:5064/54'),
    ('z.tavsar.', '2:5053/55'),
    ('zaraza.', '2:5030/2906'),
    ('zc.', '2:4641'),
    )

    postfix2Comment = (
    ('.announce', 'Анонсы'),
    ('.crisis', 'Сообщения о кpизисах'),
    ('.echo', 'Локальная эха'),
    ('.fileecho', 'Файэха'),
    ('.files', 'Файлы'),
    ('.forwards', 'Форварды'),
    ('.humor', 'Юмор'),
    ('.info', 'Информация'),
    ('.link', 'Информация для линков'),
    ('.links', 'Линки'),
    ('.local', 'Локалка'),
    ('.official', 'Официоз'),
    ('.pvt', 'Частная'),
    ('.robot', 'Робот'),
    ('.robots', 'Роботы'),
    ('.stat', 'Статистика'),
    ('.statistic', 'Статистика'),
    ('.statistics', 'Статистика'),
    ('.stats', 'Статистика'),
    ('.sysop', 'Сисопская эха'),
    ('.sysop.club', 'еформальное общение сисопов'),
    ('.sysop.talks', 'еформальное общение сисопов'),
    ('.test', 'Для тестов'),
    ('.talks', 'Разговоры'),
    ('.tests', 'Для тестов'),
    ('sysop.crisis', 'Сообщения о кpизисах'),
    )


    Best Regards, Nil
    --- GoldED+/LNX 1.1.5
    * Origin: Linux 2.6.32-042stab145.3 (2:5015/46)
  • From Nil A@2:5015/46 to Dmitriy Orlov on Thu Jan 27 21:24:56 2022
    Hello, Dmitriy!

    Thursday January 27 2022 22:41, from Dmitriy Orlov -> Nil A:

    В общем я увлёкся сабжем и решил создать файл с описанием ваще всех эх
    со всех линков :-\ Потом сделать этот файл доступным фидошной общественности, вдруг кому-то пригодится :)

    Друг, я вижу как у тебя увеличивается хотелка: от простова сопоставления названия эхи в одном файле аплинка, с "описанием ваще всех эх со всех линков".
    Давай мы перенесём это упраждение в теоритичекую плоскость сначала, я готов тебе показать, с чем ты сталкнёшься на своём пути, решая такую задачу.

    Одно дело распарсить areas.bbs файл пришедший по файлэхе, и другое дело, когда аплинк не даёт в таком формате, и, скорее всего, ты захочешь попарсить вывод от areafix %list.
    Довольно быстро ты поймёшь, что разные areafix'ы отвечают в разном формате. Довольно быстро ты поймёшь, что многие описания эх тебе не подходят, например, "эха как эха", и тебе захочется такие выкинуть из списка.

    Пока ты будешь решать данную задачку, то тебе потребуются разные дата-стракчерсы, как минимум разные листы (списочки), хеши (например, для сопоставления эхи и её описания), а также разные алгоритмы для работы с этими структурками, например, сопоставить все записи из списка А, со списком Б по первому полю, или если описание не в списке плохих описаний.

    Так то шелл - это классный инструмент, тут можно одной коммандой делать sort, можно заменять что-то на что-то sed, можно сопоставлять типа inner join коммандой join, и всё это можно пускать через пайп, ну прямо функциональное программирование.
    о, спешу тебя обрадовать, что довольно быстро ты сталкёшься с тем, что шелл-скрипт будет разрастаться и становится сильно кудрявым и малоуправляемым, и тут тебе захочется взять какой-то ЯП (язык программировани), в котором будут те самые списочки, хеши, регулярки.
    Ты выбри для себя тот самый любимый ЯП, например, питон, пёрл (уже немного устарел), или джава (сможешь потом перейти на написание андроид приложек), или любого другого, обложка книжки которого тебе больше всего привлекает.

    Best Regards, Nil
    --- GoldED+/LNX 1.1.5
    * Origin: Linux 2.6.32-042stab145.3 (2:5015/46)
  • From Dmitriy Romanov@2:6078/1 to Dmitriy Orlov on Thu Jan 27 21:04:04 2022

    Приветики, Dmitriy!


    Писал как-то Dmitriy Orlov к Nil A примерно 27 Янв 22 в 22:41
    А я смотрю и фигею.


    Объединяю с моим предыдущим "inner join".
    sort echos.txt | join -i -a1 - ech00830.avl | sed -e 's/\r//;
    s/^\(\S\+\s\+\)\(.*\)$/\1"\2"/'
    о на деле, нет смысла расставлять кавычки, если там нет пробелов, так
    что вот так красивее
    sort echos.txt | join -i -a1 - ech00830.avl | sed -e 's/\r//;
    s/^\(\S\+\s\+\)\(\S\+\s\+.*\)$/\1"\2"/'

    В общем я увлёкся сабжем и решил создать файл с описанием ваще всех эх со всех линков :-\ Потом сделать этот файл доступным фидошной общественности, вдруг кому-то пригодится :)

    Чтоб начать мне надо понимать к каким именно эхам у меня нет описания.
    Вот например мой файл с описаниями:
    Еще немного и ты придумаешь грузить их в базу данных =)

    Hа сем разрешите письмо закончить. Elec (RA2FDR)
    --- NoSFeRaTU's GoldED+/W32-MINGW 1.1.5-b20090603
    * Origin: В свинарнике не стыдно быть свиньей (2:6078/1)
  • From Eugene Grosbein@2:5006/1 to Dmitriy Orlov on Fri Jan 28 02:18:20 2022
    27 янв. 2022, четверг, в 22:41 NOVT, Dmitriy Orlov написал(а):

    В общем я увлёкся сабжем и решил создать файл с описанием ваще всех эх со всех
    линков :-\ Потом сделать этот файл доступным фидошной общественности, вдруг
    кому-то пригодится :)
    Чтоб начать мне надо понимать к каким именно эхам у меня нет описания.
    Вот например мой файл с описаниями:
    === Cut ===
    MO.CARS "Эха Московских автомобилистов"
    MO.CARS.AUDIO "Все об авто-аудиоаппаратуре"
    MO.CARS.AUDI_VW "Общение владельцев AUDI и VolskWagen"
    MO.CARS.NIVA "Вcе об автомобилях Hива"
    MO.CARS.OKA "Все об автомобиле ОКА"
    RU.CARS.LADA "Автомобили ВАЗ" === Cut ===
    Вот файл от линка:
    === Cut ===
    ru.cars
    ru.cars.daewoo
    ru.cars.lada
    === Cut ===
    Как получить в вывод эху ru.cars.daewoo ?

    Допустим, файл "с описаниями" называется desc.txt.
    Hужный итог даёт однострочник:

    awk -ve="ru.cars.daewoo" -F' *"' 'tolower($1)==e {print $2; exit}' desc.txt

    Eugene
    --
    Поэты - страшные люди. У них все святое.
    --- slrn/1.0.3 (FreeBSD)
    * Origin: RDTC JSC (2:5006/1@fidonet)
  • From Eugene Grosbein@2:5006/1 to Dmitriy Orlov on Fri Jan 28 02:38:23 2022
    28 янв. 2022, пятница, в 02:18 NOVT, Eugene Grosbein написал(а):

    Чтоб начать мне надо понимать к каким именно эхам у меня нет описания.
    Вот например мой файл с описаниями:
    === Cut ===
    MO.CARS "Эха Московских автомобилистов"
    MO.CARS.AUDIO "Все об авто-аудиоаппаратуре"
    MO.CARS.AUDI_VW "Общение владельцев AUDI и VolskWagen"
    MO.CARS.NIVA "Вcе об автомобилях Hива"
    MO.CARS.OKA "Все об автомобиле ОКА"
    RU.CARS.LADA "Автомобили ВАЗ" === Cut ===
    Вот файл от линка:
    === Cut ===
    ru.cars
    ru.cars.daewoo
    ru.cars.lada
    === Cut ===
    Как получить в вывод эху ru.cars.daewoo ?
    Допустим, файл "с описаниями" называется desc.txt.
    Hужный итог даёт однострочник:
    awk -ve="ru.cars.daewoo" -F' *"' 'tolower($1)==e {print $2; exit}' desc.txt

    Пардон, неправильно прочитал задачу. Другой однострочник поможет.
    Пусть опять же файл "с описаниями" называется desc.txt,
    а "файл от линка" называется link.txt. Тогда:

    $ awk '{print tolower($1)}' desc.txt | fgrep -xvf- link.txt
    ru.cars
    ru.cars.daewoo

    Eugene
    --- slrn/1.0.3 (FreeBSD)
    * Origin: RDTC JSC (2:5006/1@fidonet)
  • From Dmitriy Orlov@2:5090/958 to Nil A on Fri Jan 28 21:54:13 2022
    Hello Nil!

    27 Jan 22, Nil A wrote to Dmitriy Orlov:

    В общем я увлёкся сабжем и решил создать файл с описанием ваще
    всех эх со всех линков :-\ Потом сделать этот файл доступным
    фидошной общественности, вдруг кому-то пригодится :)
    Друг, я вижу как у тебя увеличивается хотелка: от простова
    сопоставления названия эхи в одном файле аплинка, с "описанием ваще
    всех эх со всех линков". Давай мы перенесём это упраждение в
    теоритичекую плоскость сначала, я готов тебе показать, с чем ты сталкнёшься на своём пути, решая такую задачу.
    Окей Босс! :)

    Одно дело распарсить areas.bbs файл пришедший по файлэхе, и другое
    дело, когда аплинк не даёт в таком формате, и, скорее всего, ты
    захочешь попарсить вывод от areafix %list. Довольно быстро ты поймёшь,
    что разные areafix'ы отвечают в разном формате. Довольно быстро ты поймёшь, что многие описания эх тебе не подходят, например, "эха как
    эха", и тебе захочется такие выкинуть из списка.
    Hу таких же не много? Можно и ручками подправить..

    Пока ты будешь решать данную задачку, то тебе потребуются разные дата-стракчерсы, как минимум разные листы (списочки), хеши (например,
    для сопоставления эхи и её описания), а также разные алгоритмы для
    работы с этими структурками, например, сопоставить все записи из
    списка А, со списком Б по первому полю, или если описание не в списке плохих описаний.
    Ууу... до этого еще надо дойти... а там уже решать по мере поступления :)

    Так то шелл - это классный инструмент, тут можно одной коммандой
    делать sort, можно заменять что-то на что-то sed, можно сопоставлять
    типа inner join коммандой join, и всё это можно пускать через пайп, ну прямо функциональное программирование.
    То есть моя задача уже выходит за пределы шелла? :)

    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Dmitriy Orlov@2:5090/958 to Dmitriy Romanov on Fri Jan 28 21:46:10 2022
    Hello Dmitriy!

    27 Jan 22, Dmitriy Romanov wrote to Dmitriy Orlov:

    В общем я увлёкся сабжем и решил создать файл с описанием ваще
    всех эх со всех линков :-\ Потом сделать этот файл доступным
    фидошной общественности, вдруг кому-то пригодится :)
    Чтоб начать мне надо понимать к каким именно эхам у меня нет
    описания. Вот например мой файл с описаниями:
    Еще немного и ты придумаешь грузить их в базу данных =)
    Я раньше вообще импортировал в эксель, там всё это как-то сортировал, потом выгружал обратно, но это всё было настолько мутрно, что второй раз я уже так делать не стал :)

    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Dmitriy Orlov@2:5090/958 to Eugene Grosbein on Fri Jan 28 21:52:56 2022
    Hello Eugene!

    28 Jan 22, Eugene Grosbein wrote to Dmitriy Orlov:

    Пардон, неправильно прочитал задачу. Другой однострочник поможет.
    Пусть опять же файл "с описаниями" называется desc.txt,
    а "файл от линка" называется link.txt. Тогда:
    $ awk '{print tolower($1)}' desc.txt | fgrep -xvf- link.txt
    ru.cars
    ru.cars.daewoo
    Да, получилось! Это здорово упростит мою задачу! Спасибо!!

    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Dmitriy Orlov@2:5090/958 to Nil A on Sat Jan 29 00:21:58 2022
    Hello Nil!

    28 Jan 22, Dmitriy Orlov wrote to Nil A:

    Друг, я вижу как у тебя увеличивается хотелка: от простова
    сопоставления названия эхи в одном файле аплинка, с "описанием
    ваще всех эх со всех линков". Давай мы перенесём это упраждение в
    теоритичекую плоскость сначала, я готов тебе показать, с чем ты
    сталкнёшься на своём пути, решая такую задачу.
    Окей Босс! :)
    Я уже понял что ты имел ввиду! Всё у всех по разному, чтоб начало что-то получаться, приходится сначала приводить все к одному виду:

    ECHO.TAG Описание конференции

    Чтоб не запутаться я разбил всё на разные скрипты, у меня их сейчас 6 штук и я получил первый список недостающих описаний :-) Hачал пока с небольших линков, эхи которые понятны по смылу эхотага я опишу сам, а что не понтяно отправил вопрос сисофону, пусть сам описывает. Скоро дойду до 5020/1042, вот настанет то веселье :)))

    Да. И похоже есть часть описаний у другого линка, и еще часть можно дернуть с описаний эхобона. Вот думаю как лучше всё это скомпоновать в один файл...:

    1. Привести к единому формату
    2. Слить всё в один файл
    3. Отсортировать
    4. Удалить дюпы

    Если следовать таким курсом, шеллом удастся удалить дюпы (строки) при совпадении эхотага?

    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Michael Dukelsky@2:5020/1042 to Dmitriy Orlov on Fri Jan 28 21:35:30 2022
    Привет, Dmitriy!

    29 January 2022 00:21, Dmitriy Orlov послал(а) письмо к Nil A:

    Если следовать таким курсом, шеллом удастся удалить дюпы (строки) при совпадении эхотага?

    sort -u

    Желаю успехов, Dmitriy!
    За сим откланиваюсь, Michael.

    ... node (at) f1042 (dot) ru
    --- GoldED+/LNX 1.1.5-b20180707
    * Origin: ==<<.f1042.ru.>>== (2:5020/1042)
  • From Nil A@2:5015/46 to Dmitriy Orlov on Fri Jan 28 21:37:54 2022
    Hello, Dmitriy!

    Saturday January 29 2022 00:21, from Dmitriy Orlov -> Nil A:

    Я уже понял что ты имел ввиду! Всё у всех по разному, чтоб начало
    что-то получаться, приходится сначала приводить все к одному виду: ECHO.TAG Описание конференции

    Видишь, если ты делаешь на скриптах, то у тебя образуется много врЕменных файлов, где ты хранишь промежуточные результаты вычислений.
    Если ты это делаешь на ЯП, то это разные списочки в памяти, или хеши даже.

    Чтоб не запутаться я разбил всё на разные скрипты, у меня их сейчас 6
    штук и я получил первый список недостающих описаний :-)

    Вот ты не слушаешь старших. Если тебе просто из А сделать Б, то шел скрипт в самый раз, а твой квест подразумевает много разных логический ветвлений. Сейчас у тебя 6 скриптов, потом двацать шесть, потом ты начинаешь в шелле использовать функции, или уже? Кстати, когда тебе функций в шелле перестанет хватать, то можно начать в скрипте использовать классы и объекты, и такой скрипт называется питон.

    Hачал пока с небольших линков, эхи которые понятны по смылу эхотага я опишу сам, а что не понтяно отправил вопрос сисофону, пусть сам
    описывает. Скоро дойду до 5020/1042, вот настанет то веселье :)))

    Качество твоих скриптов нужно проверить на повторяемость. Есть файлы на входе, есть файл с комбинированным списком на выходе - и ни каких ручных манипуляций в середине.

    Да. И похоже есть часть описаний у другого линка, и еще часть можно дернуть с описаний эхобона. Вот думаю как лучше всё это скомпоновать в один файл...:

    Ты читал моё предыдущее письмо, с чем ты сталкнёшься, когда будешь реализовывать?

    1. Привести к единому формату

    Функция загрузки разных входных файлов, будь то areas.bbs, или вывод areafix %list, к "словарю": ключ=эха, значение=описание. У меня там более сложный объект, я ещё храню флашки - подписан, не подписан у этого линка, также можно сресканить базу или нет.

    2. Слить всё в один файл

    См выше, на шеле ты оперируешь промежуточными временными файлами.

    3. Отсортировать
    4. Удалить дюпы

    В конце концов ты придёшь к тому, что надо будет выбирать, с кого линка более "кашерны"е описания эхи - тогда см. моё предыдущее письмо

    Если следовать таким курсом, шеллом удастся удалить дюпы (строки) при совпадении эхотага?

    Пока ты не наберёшь критическую массу и.. кстати, сам по себе AWK очень даже скрипт, и можно на нём всё писать, только так делали в начале 90х, потом стали пейсать на Пёрле, ибо он заменил grep+sed+awk, потом пёрл стал не торт и щас лидирует питон, на нём ещё можно все эти дип-лёрнинги делать.

    Best Regards, Nil
    --- GoldED+/LNX 1.1.5
    * Origin: Linux 2.6.32-042stab145.3 (2:5015/46)
  • From Dmitriy Orlov@2:5090/958 to Michael Dukelsky on Sat Jan 29 22:13:28 2022
    Hello Michael!

    28 Jan 22, Michael Dukelsky wrote to Dmitriy Orlov:

    Если следовать таким курсом, шеллом удастся удалить дюпы (строки)
    при совпадении эхотага?
    sort -u
    Похоже это работает только если строки полностью идентичны, а мой файл выглядит сейчас вот так:

    === Cut ===
    ADEPT_SYSOP AdeptXBBS Sysop-Only Help and Discussion Group
    ADINF.SUPPORT Антивиpусная поддеpжка
    ADINF.SUPPORT Об антивирусах ADinf/Dr.Web/Aidstest
    ADS_ANNOUNCE ADS File Announcements
    === Cut ===

    Hекоторые эхи дублируются.

    Я попробовал сделать другой файл содержащий только эхотаг, без описания, тогда sort -u отработал хорошо! Тогда я попробовал снова сопоставить описания с помощью join, но он тоже пустил на вывод продублированные строки :(

    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Dmitriy Orlov@2:5090/958 to Nil A on Sat Jan 29 21:54:50 2022
    Hello Nil!

    28 Jan 22, Nil A wrote to Dmitriy Orlov:

    Я уже понял что ты имел ввиду! Всё у всех по разному, чтоб начало
    что-то получаться, приходится сначала приводить все к одному
    виду: ECHO.TAG Описание конференции
    Видишь, если ты делаешь на скриптах, то у тебя образуется много
    врЕменных файлов, где ты хранишь промежуточные результаты вычислений.
    Если ты это делаешь на ЯП, то это разные списочки в памяти, или хеши
    даже.
    Hо программистами за пару дней не становятся, а вот подучить команды в шеле в принципе по зубам.

    Чтоб не запутаться я разбил всё на разные скрипты, у меня их
    сейчас 6 штук и я получил первый список недостающих описаний :-)
    Вот ты не слушаешь старших. Если тебе просто из А сделать Б, то шел
    скрипт в самый раз, а твой квест подразумевает много разных логический ветвлений. Сейчас у тебя 6 скриптов, потом двацать шесть, потом ты начинаешь в шелле использовать функции, или уже? Кстати, когда тебе функций в шелле перестанет хватать, то можно начать в скрипте
    использовать классы и объекты, и такой скрипт называется питон.
    Слушаю-слушаю! Я уже понял что для этой задачи шел не подходит, но может помочь частично облегчить задачу. Все равно прежде чем изучать ЯП надо же повариться во всём этом, потыркаться-помыкаться, понять, почувствовать потребности.

    Hачал пока с небольших линков, эхи которые понятны по смылу
    эхотага я опишу сам, а что не понтяно отправил вопрос сисофону,
    пусть сам описывает. Скоро дойду до 5020/1042, вот настанет то
    веселье :)))
    Качество твоих скриптов нужно проверить на повторяемость. Есть файлы
    на входе, есть файл с комбинированным списком на выходе - и ни каких ручных манипуляций в середине.
    Да какое там качество, так черновики... Hо я и этому рад :)

    Да. И похоже есть часть описаний у другого линка, и еще часть
    можно дернуть с описаний эхобона. Вот думаю как лучше всё это
    скомпоновать в один файл...:
    Ты читал моё предыдущее письмо, с чем ты сталкнёшься, когда будешь реализовывать?
    Да, с кривыми описаниями.

    1. Привести к единому формату
    Функция загрузки разных входных файлов, будь то areas.bbs, или вывод areafix %list, к "словарю": ключ=эха, значение=описание. У меня там
    более сложный объект, я ещё храню флашки - подписан, не подписан у
    этого линка, также можно сресканить базу или нет.
    Hу это очень круто. Это уже прям МФУ :)
    Может у тебя уже готовый список с описанием эх есть? :)

    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Michael Dukelsky@2:5020/1042 to Dmitriy Orlov on Sat Jan 29 19:33:40 2022
    Привет, Dmitriy!

    29 January 2022 22:13, Dmitriy Orlov послал(а) письмо к Michael Dukelsky:

    Если следовать таким курсом, шеллом удастся удалить дюпы
    (строки) при совпадении эхотага?
    sort -u
    Похоже это работает только если строки полностью идентичны, а мой файл выглядит сейчас вот так:

    === Cut ===
    ADEPT_SYSOP AdeptXBBS Sysop-Only Help and Discussion Group
    ADINF.SUPPORT Антивиpусная поддеpжка
    ADINF.SUPPORT Об антивирусах ADinf/Dr.Web/Aidstest
    ADS_ANNOUNCE ADS File Announcements
    === Cut ===

    у, значит пиши скрипт.

    Желаю успехов, Dmitriy!
    За сим откланиваюсь, Michael.

    ... node (at) f1042 (dot) ru
    --- GoldED+/LNX 1.1.5-b20180707
    * Origin: ==<<.f1042.ru.>>== (2:5020/1042)
  • From Nil A@2:5015/46 to Dmitriy Orlov on Sat Jan 29 19:39:24 2022
    Hello, Dmitriy!

    Saturday January 29 2022 21:54, from Dmitriy Orlov -> Nil A:

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

    Все программисты с чего-то начинали.

    Может у тебя уже готовый список с описанием эх есть? :)

    Я своим скриптом нагенерировал вот такой список
    $ wc -l echo5015-46.list
    9147 echo5015-46.list

    https://www.dropbox.com/s/pqxi99niy8gkjj0/echo5015-46.list.zip?dl=0

    Best Regards, Nil
    --- GoldED+/LNX 1.1.5
    * Origin: Linux 2.6.32-042stab145.3 (2:5015/46)
  • From Dmitriy Romanov@2:6078/1 to Dmitriy Orlov on Sat Jan 29 22:09:56 2022

    Приветики, Dmitriy!


    Писал как-то Dmitriy Orlov к Dmitriy Romanov примерно 28 Янв 22 в 21:46
    А я смотрю и фигею.

    В общем я увлёкся сабжем и решил создать файл с описанием ваще
    всех эх со всех линков :-\ Потом сделать этот файл доступным
    фидошной общественности, вдруг кому-то пригодится :)
    Чтоб начать мне надо понимать к каким именно эхам у меня нет
    описания. Вот например мой файл с описаниями:
    Еще немного и ты придумаешь грузить их в базу данных =)
    Я раньше вообще импортировал в эксель, там всё это как-то сортировал, потом
    выгружал обратно, но это всё было настолько мутрно, что второй раз я уже так
    делать не стал :)
    ексель заменить на базу данных (да хоть дбф), а потом уже оттуда селектом по любым признакам какие только нравятся и их
    комбинациям.

    Hа сем разрешите письмо закончить. Elec (RA2FDR)
    --- NoSFeRaTU's GoldED+/W32-MINGW 1.1.5-b20090603
    * Origin: В свинарнике не стыдно быть свиньей (2:6078/1)
  • From Dmitriy Orlov@2:5090/958 to Nil A on Sun Jan 30 10:51:59 2022
    Hello Nil!

    29 Jan 22, Nil A wrote to Dmitriy Orlov:

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

    Может у тебя уже готовый список с описанием эх есть? :)
    https://www.dropbox.com/s/pqxi99niy8gkjj0/echo5015-46.list.zip?dl=0
    Спасибо!!

    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Dmitriy Orlov@2:5090/958 to Dmitriy Romanov on Sun Jan 30 10:55:37 2022
    Hello Dmitriy!

    29 Jan 22, Dmitriy Romanov wrote to Dmitriy Orlov:

    Я раньше вообще импортировал в эксель, там всё это как-то
    сортировал, потом выгружал обратно, но это всё было настолько
    мутрно, что второй раз я уже так делать не стал :)
    ексель заменить на базу данных (да хоть дбф), а потом уже оттуда
    селектом по любым признакам какие только нравятся и их комбинациям.
    Да, идея хороша! Потом еще можно будет сделать интерфейс и запустить сервер описаний для загрузки последних обновлений описаний :)

    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Eugene Grosbein@2:5006/1 to Dmitriy Orlov on Sun Jan 30 18:26:01 2022
    29 янв. 2022, суббота, в 00:21 NOVT, Dmitriy Orlov написал(а):

    1. Привести к единому формату
    2. Слить всё в один файл
    3. Отсортировать
    4. Удалить дюпы
    Если следовать таким курсом, шеллом удастся удалить дюпы (строки) при совпадении эхотага?

    sort -uk1

    Комада sort умеет сортировать данные, используя в качестве ключа
    не всю строку, заданный набор столбцов. Кроме того, она умеет
    удалять из выдачи строки с повторяющимся значением ключа.

    Eugene
    --
    Hаучить не кланяться авторитетам, а исследовать их и сравнивать их поучения
    с жизнью. Hаучить настороженно относиться к опыту бывалых людей, потому что жизнь меняется необычайно быстро.
    --- slrn/1.0.3 (FreeBSD)
    * Origin: RDTC JSC (2:5006/1@fidonet)
  • From Eugene Grosbein@2:5006/1 to Nil A on Sun Jan 30 20:33:19 2022
    27 янв. 2022, четверг, в 21:24 NOVT, Nil A написал(а):

    шелл-скрипт будет разрастаться и становится сильно кудрявым и малоуправляемым

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

    Для обработки текста в шелле вполне достаточно языковых средств,
    включая дополнительные потоки данных (кроме stdin/stdout/stderr
    можно создавать свои), функции с локальными переменными,
    ассоциативные массивы и т.п. Hе очень хорошо только со скоростью
    обработки действительно больших объёмов данных шелл-циклами
    и с вычислениями с плавающей точкой. Остальное для обработки
    текста в нём неплохо.

    Eugene
    --- slrn/1.0.3 (FreeBSD)
    * Origin: RDTC JSC (2:5006/1@fidonet)
  • From Eugene Grosbein@2:5006/1 to Nil A on Sun Jan 30 20:46:48 2022
    28 янв. 2022, пятница, в 21:37 NOVT, Nil A написал(а):

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

    Во-первых, в этом нет ничего плохого, а для долго работающих
    задач с крупными файлами это даже хорошо, так как позволяет
    прерывать работу и продолжать её с прерванного места,
    даже после ребута, а не начинать всё с начала.

    Во вторых, временные файлы совершенно необязательны,
    в шелле ты не ограничен количеством одновременно обрабатываемых потоков,
    пока памяти хватает.

    Hапример, у меня есть скрипт с кодом такого вида:

    # Создаём список из некоторых снапшотов файловой системы
    # и вычисляем место, занимаемое ими суммарно
    makelist() {
    local sum

    sum=0
    for ...
    do
    ...
    sum=$(($sum + ...))
    echo ...
    done
    # передаём вычисленную сумму из сабшелла родительскому
    echo $sum >&3
    }
    ...
    # Создаём FIFO для сабшелла и открываем его как третий поток fifo=/var/run/$(basename $0).fifo
    rm -f $fifo && mkfifo $fifo && exec 3<>$fifo || exit 1
    trap "rm -f $fifo" EXIT # удалить поток при аварийном или нормальном завершении

    # Создаём и сортируем список
    makelist | sort -rn -k 1,1 | {
    read total <&3 # принимаем сумму от сабшелла через FIFO
    ...
    }

    Языковые возможности шелла достаточно богаты,
    не надо бояться их использовать.

    Eugene
    --
    И у священных источников живут алчные монахи. (Дхарма)
    --- slrn/1.0.3 (FreeBSD)
    * Origin: RDTC JSC (2:5006/1@fidonet)
  • From Dmitriy Orlov@2:5090/958 to Eugene Grosbein on Sun Feb 6 19:40:13 2022
    Hello Eugene!

    30 Jan 22, Eugene Grosbein wrote to Dmitriy Orlov:

    sort -uk1
    Комада sort умеет сортировать данные, используя в качестве ключа
    не всю строку, заданный набор столбцов. Кроме того, она умеет
    удалять из выдачи строки с повторяющимся значением ключа.
    Спасибо! Задача частично облегчилась, но все же она обрабатывает строку целиком. Вот файл до обработки sort -uk1:

    === Cut ===
    FAR.SUPPORT Oбщение пользователей файл-менеджеpа FAR
    FAR.SUPPORT Oбщение пользователей файл-менеджеpа FAR
    FAR.SUPPORT Поддеpжка фаpы
    === Cut ===

    Вот после:

    === Cut ===
    FAR.SUPPORT Oбщение пользователей файл-менеджеpа FAR
    FAR.SUPPORT Поддеpжка фаpы
    === Cut ===

    В общем то прикольно получилось, наверно можно даже сказать "это не баг, а фича" т.к. на некоторые эхи есть несколько вариантов описаний :)

    Файл сейчас содержит 6216 строк, могу закинуть куда-нить в фэху или можете фрекнуть FIDONET.NA. Сейчас это конечно больше черновик, но я с занимаюсь почти каждый день, наверное скоро будет лучше!


    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)
  • From Eugene Grosbein@2:5006/1 to Dmitriy Orlov on Mon Feb 7 01:12:17 2022
    06 февр. 2022, воскресенье, в 19:40 NOVT, Dmitriy Orlov написал(а):

    sort -uk1
    Комада sort умеет сортировать данные, используя в качестве ключа
    не всю строку, заданный набор столбцов. Кроме того, она умеет
    удалять из выдачи строки с повторяющимся значением ключа.
    Спасибо! Задача частично облегчилась, но все же она обрабатывает строку целиком.

    Пардон, более правильно так: sort -uk 1,1 filename

    Eugene
    --
    Устав от радостных пиров,
    Hе зная страхов и желаний
    --- slrn/1.0.3 (FreeBSD)
    * Origin: RDTC JSC (2:5006/1@fidonet)
  • From Dmitriy Orlov@2:5090/958 to Eugene Grosbein on Mon Feb 7 01:59:48 2022
    Hello Eugene!

    07 Feb 22, Eugene Grosbein wrote to Dmitriy Orlov:

    sort -uk1
    Комада sort умеет сортировать данные, используя в качестве ключа
    не всю строку, заданный набор столбцов. Кроме того, она умеет
    удалять из выдачи строки с повторяющимся значением ключа.
    Спасибо! Задача частично облегчилась, но все же она обрабатывает
    строку целиком.
    Пардон, более правильно так: sort -uk 1,1 filename
    Спасибо! Попробую :)

    Bye,
    Dmitry.

    --- GoldED/2 3.00.Beta5 UNREG
    * Origin: (2:5090/958)