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

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

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

  • Измените одиночные пустые строки, чтобы удвоить пустые строки, используя awk
  • путают с переменными awk и shell
  • Прочитайте два текстовых файла, объедините каждую строку
  • С awk, как вставлять число только для строк, начинающихся с «Toto», когда они находятся между определенной парой шаблонов
  • Удалите несколько запятых из определенного столбца файла с разделителями табуляции и распечатайте слова на новой строке
  • Как сделать замену на `$ 0`, но сохранить старое значение?
  •  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, чтобы разделить строку на одиночные пробелы, не кратные
  • Извлечь имя группы из `id` и сохранить ее в переменной
  • Почему uniq игнорирует Unicode и строки с одной буквой?
  • Обратная косая черта с трубкой в ​​системной команде от awk
  • One Solution collect form web for “Изменить строку, если оригинал не соответствует определенной строке.”

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

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

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

     awk '$1 == "." {$1 = "chr:"$2":"$3};1' filename > newfilename 
    Linux и Unix - лучшая ОС в мире.