Замена нескольких слов в файле с разделителями табуляцией альтернативными словами

Немного позже, но я знаю ответ и то, что вы ищете for - это команда slackpkg , используйте ее следующим образом:

# slackpkg install ap

slackpkg - это официальный установщик пакетов для Slackware. Эта утилита должна быть настроена в основном так, чтобы указать зеркало, которое будет использоваться при установке и обновлении пакетов.

Но вам необходимо добавить этот пакет в минимальный набор для установки, он находится в серии ap .

Поэтому я предлагаю следующую процедуру:

1) Начните установку и выберите минимальную настройку.

2) Дождитесь завершения

3) Войдите и смонтируйте загрузочный диск Slackware

# mount /dev/sr0 /media/cdrom

4) Установите пакет slackpkg с помощью installpkg (эта утилита входит в пакет pkgtools , который принадлежит к серии a )

# installpkg /media/cdrom/slackware/ap/slackpkg-2.82.1-noarch-3.txz

5) Отредактируйте файл / etc / slackpkg / mirrors и раскомментируйте запись cdrom: // media / cdrom /

#----------------------------------------------------------------
# Local CD/DVD drive
#----------------------------------------------------------------
cdrom://media/cdrom/
#
#----------------------------------------------------------------
# Local Directory

6) запустите slackpkg update , чтобы обновить источники установки

7) используйте slackpkg install ap , чтобы выбрать, из каких пакетов устанавливать the ap series

8) Выберите желаемые пакеты

9) Идите пообедать

1
16.05.2017, 15:35
3 ответа

На самом деле это всего лишь вариант "создать таблицу поиска из одного файла; использовать ее при обработке другого файла" с той особенностью, что ключ поиска нужно отделить от второго поля. . Вы можете сделать это в awk, например:

awk '
  BEGIN{OFS=FS="\t"} 
  NR==FNR {
    a[$1]=$2; next
  } 
  {
    split($2,b,":"); 
    if (b[1] in a) $2 = a[b[1]]":"b[2]
  } 1' File_2 File_1
1
27.01.2020, 23:45

awk подход:

awk 'NR==FNR{a[$1]=$2;next}$2 in a{$2=a[$2]":"$3;$3=""}1' File_2 FS="[ |:]" File_1

Вывод:

522 Clostridium_tetani_E88:CTC00972     -   506 3.20E-138   
522 Natrialba_magadii:Nmag_3027    -   561 4.70E-73
522 nml:Namu_3564   -   566 1.80E-146

Обратите внимание, что коды nml и nla не совпадают между двумя входными файлами

0
27.01.2020, 23:45

Это должно работать с sed:

sed '/^[a-z]*[[:cntrl:]].*/{s/[[:cntrl:]]/###/;H;d;}
 G
 s/\([a-z]*\)\(:.*\n\)\1###\([^[:cntrl:]]*\)/\3\2/
 P
 d' file_2 file_1

Это принятие этого универсального решения. См. там объяснение того, как это работает.

0
27.01.2020, 23:45

Теги

Похожие вопросы