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

У меня есть файл с миллионами строк и вы хотите изменить значения в столбце 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 

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

One Solution collect form web for “Изменить строку, если оригинал не соответствует определенной строке.”

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

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

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

 awk '$1 == "." {$1 = "chr:"$2":"$3};1' filename > newfilename 
  • Дублируйте, с небольшими изменениями, несколько строк в текстовом файле
  • Условно удалить строку из файла
  • sed / awk удаляет новую строку на двух шаблонных совпадениях
  • Разделить файл на основе шаблона с ведущими нулями
  • Как извлечь первое целое из текстовой строки в столбце файла с разделителями табуляции?
  • Как обновить даты (на 30 дней) в файлах, идущих в это конкретное место в unix?
  • массив awk, использующий число, поскольку значение не работает
  • Сумма файлов из списка файлов
  • Как префикс значений столбца с апострофом (')?
  • Мне нужно получить номер строки, который имеет наибольшее значение
  • Считайте уникальные строки только для заданного шаблона
  • Петля через массив
  • Interesting Posts

    Объединение определенных столбцов из 2 файлов на основе совпадения полей

    Лучший способ убить процессы, созданные скриптом bash?

    Замена в файлах sed с помощью regex

    Можно ли отображать часть окна на втором устройстве?

    Почему файл .config не копируется в / boot после установки нового ядра?

    Помогите мне заменить sshfs на ssh?

    Как установить задание Cron, которое выполняется каждые три часа в течение неопределенного периода времени; с регистрацией?

    Не удается прочитать файл на томе NTFS, хотя права достаточны

    Linux HDMI – нет выхода после загрузки

    Что происходит, когда два apt-пакета зависят от двух разных версий одного и того же пакета?

    udev не работает при загрузке?

    Связывание функции в Emacs после поиска кода с помощью Mx describe-key

    Символ файловой системы на «+» (drwxr-x — + 2 root root 4096 20 янв. 21:48 myusername)

    OpenBSD и ограничение входа на локальный, только как в login.access FreeBSD (5)

    Ваша система не настроена на правильное выполнение KVM

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