Изменить строку, если оригинал не соответствует определенной строке.

У меня есть файл с миллионами строк и вы хотите изменить значения в столбце A, только если строка «.». Модификацией было бы добавить "chr:"$2":"$3 к началу строки. Все остальные строки будут напечатаны как оригинальная версия.

Пример ввода:

 ABCDEFGH rs125 2 5433 T TACA A 3 2 chr2:4543 2 4543 IR 8 2 rs123 3 4332 AC 9 3 . 3 7654 IR 8 

Выше, четвертый ряд начинается с '.' и его необходимо изменить на «chr3: 7654». Все остальные строки должны оставаться неизменными.

Желаемый результат:

 ABCDEFGH rs125 2 5433 T TACA A 3 2 chr2:4543 2 4543 IR 8 2 rs123 3 4332 AC 9 3 chr3:7654 3 7654 IR 8 2 

Мой код до сих пор работает, но меняет ВСЕ имена, чтобы начать «chr …», даже когда «rs …» должен оставаться неизменным:

 awk '($1 ~ /^./) {$1 = "chr:"$2":"$3}1' filename > newfilename 

Это, вероятно, очень простое решение, но оно вызывает очень большие проблемы. Благодаря!

  • awk синтаксическая ошибка неожиданная новая строка или конец строки
  • Как получить общее количество строк и уникальных счетчиков в одной строке
  • Найти и заменить значения с помощью счетчиков
  • Сумма в блоке с AWK (перезапуск суммы при изменении шаблона)
  • Слияние 2 файлов и сохранение одного дубликата
  • Awk, что я застрял
  • объединение части данных с частью заголовка
  • Сортировка .dat файлов по внутренним данным
  • One Solution collect form web for “Изменить строку, если оригинал не соответствует определенной строке.”

    Ваша проблема в регулярном выражении. /^./ будет соответствовать любому действительному символу в начале строки. Вы должны убежать . чтобы соответствовать буквально:

     awk '$1 ~ /^\./ {$1 = "chr:"$2":"$3};1' filename > newfilename 

    Но лучше просто проверить, что строка равна, а не проверять регулярные выражения:

     awk '$1 == "." {$1 = "chr:"$2":"$3};1' filename > newfilename 
    Interesting Posts

    Улучшение скорости записи SD-карты

    Используя tc, я хочу, чтобы TCP и UDP использовали один и тот же буфер

    Добавлен файл anaconda2 lib в LD_LIBRARY_PATH, в результате появляется предупреждение «без информации о версии»

    find всегда возвращает «/ mnt / hgfs protocol error» (VMware, Debian 8.x)

    Хорошо ли использовать tail -f в больших файлах журнала?

    Перенос LDAP с одной машины на другую

    sed – как капитализировать каждое третье слово?

    Поиск не работает

    Почему TOP никогда не показывает, что использование процессора достигает 100%?

    Использование красного смещения для регулировки яркости

    Ошибка при входе на сервер NIS с помощью графического интерфейса рабочего стола

    Разрешить имя файла с удаленного URL-адреса без загрузки файла

    zch не работает корректно в Mint

    Каков эффект ACL / umask на разрешения исполняемого файла, сгенерированного gcc?

    Как получить последнюю папку (отсортированную по алфавиту в порядке убывания и сопоставление шаблона) с помощью ls / find / etc?

    Linux и Unix - лучшая ОС в мире.