Строка замены называет с набором новых имен, не нарушая остальную часть файла

[1122810] Вы должны взять свои коды в кавычки:

, иначе shell заменит [1123290]\x[1123291] на [1123292]x[1123293], прежде чем он перейдет в [1123294]echo -e[1123295].

ps. двойной escape также будет работать:

2
18.09.2014, 12:43
2 ответа

awk solution

$ awk '/>/ { print $1, $2; next } { print }' aa
>YAL003W EFB1
MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD
EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK
SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS
LDDLQQSIEEDEDHVQSTDIAAMQKL*
  • />/ ищите a > в строке
  • next ; больше не читайте шаблон в awk file
1
27.01.2020, 22:13

Вот несколько решений:

  1. GREP . Паттерн поиск линий, начинающихся с > , за которым следует 2 последовательности неблагодаря ( [^] + [^] + ) или любые символы (. + ). --O причина GREP для печати только сопоставленной части каждой строки:

     $ Grep -op '^ (> [^] + [^] + |. +)  'file.fa.fa.
     > Yal003w efb1.
    MastdfskietlkqlnasladksyegtavsqadvtvfkafqsaypefsrwfnhiaS.
    Efdsfpaasaaaaaeeeeedddvdlfgsddeadaeaklkaeriaaynakkakpakpaak.ak.
    SivtldvkpwddetnleemvanvkaiemeMegltwgahqfipigfgiklqincvvigfgvs.
    Lddlqqsieededhvqstdiaamqkl *
     
  2. awk

     $ awk '{if (/> /) {print $ 1, $ 2} ell {print}}' file.fa
     > Yal003w efb1.
    MastdfskietlkqlnasladksyegtavsqadvtvfkafqsaypefsrwfnhiaS.
    Efdsfpaasaaaaaeeeeedddvdlfgsddeadaeaklkaeriaaynakkakpakpaak.ak.
    SivtldvkpwddetnleemvanvkaiemeMegltwgahqfipigfgiklqincvvigfgvs.
    Lddlqqsieededhvqstdiaamqkl *
     
  3. GNU SED

     $ SED -R 'S / (> [^] + [^] +). * / \ 1 /' file.fa
     > Yal003w efb1.
    MastdfskietlkqlnasladksyegtavsqadvtvfkafqsaypefsrwfnhiaS.
    Efdsfpaasaaaaaeeeeedddvdlfgsddeadaeaklkaeriaaynakkakpakpaak.ak.
    SivtldvkpwddetnleemvanvkaiemeMegltwgahqfipigfgiklqincvvigfgvs.
    Lddlqqsieededhvqstdiaamqkl *
     
  4. Любой SED

     $ SED 'S / \ (> [^] * [^] * \). * / \ 1 /' file.fa
     > Yal003w efb1.
    MastdfskietlkqlnasladksyegtavsqadvtvfkafqsaypefsrwfnhiaS.
    Efdsfpaasaaaaaeeeeedddvdlfgsddeadaeaklkaeriaaynakkakpakpaak.ak.
    SivtldvkpwddetnleemvanvkaiemeMegltwgahqfipigfgiklqincvvigfgvs.
    Lddlqqsieededhvqstdiaamqkl *
     
  5. Вырезать

     $ cut --d '' -f 1,2 file.fa
     > Yal003w efb1.
    MastdfskietlkqlnasladksyegtavsqadvtvfkafqsaypefsrwfnhiaS.
    Efdsfpaasaaaaaeeeeedddvdlfgsddeadaeaklkaeriaaynakkakpakpaak.ak.
    SivtldvkpwddetnleemvanvkaiemeMegltwgahqfipigfgiklqincvvigfgvs.
    Lddlqqsieededhvqstdiaamqkl *
     
  6. Perl.

     $ Perl -lane 'Print (Hidden) file.fa
     > Yal003w efb1.
    MastdfskietlkqlnasladksyegtavsqadvtvfkafqsaypefsrwfnhiaS.
    Efdsfpaasaaaaaeeeeedddvdlfgsddeadaeaklkaeriaaynakkakpakpaak.ak.
    SivtldvkpwddetnleemvanvkaiemeMegltwgahqfipigfgiklqincvvigfgvs.
    Lddlqqsieededhvqstdiaamqkl *
     

    Параметры

    • L : удалите трейлинные новости от каждой строки ввода и добавьте новую онлайн на каждый вызов принтера.
    • A : разделить каждую входную линию на пробере, в массив @F .
    • N : Прочитайте строку входной файлы по строке.
    • E : Запустите этот скрипт на каждой строке.

    Само сценария просто печатает 1-й и 2-й поля. В случае строк последовательности она просто будет напечатана единственное поле доступно, первый. который является всей линией.

1
27.01.2020, 22:13

Теги

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