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

Я хотел бы разделить первый столбец на основе разделителя, здесь - . Основываясь на последнем значении, последний столбец, здесь столбец 2, должен быть заполнен. Если значение равно 01 или 99 замените их на 2 или 1 соответственно.

 #input PE01-02-01 -9 PE01-02-99 -9 PE01-03-01 -9 PE01-03-99 -9 PE01-05-01 -9 PE01-05-99 -9 #output PE01-02-01 2 PE01-02-99 1 PE01-03-01 2 PE01-03-99 1 PE01-05-01 2 PE01-05-99 1 

не могли бы вы предложить предложение о том, как достичь этого? Я пытался разбить первый столбец на массив, получить доступ к последнему элементу, а затем обновить второй столбец.

  • Удалить комментарии в файле C
  • как я могу подавить unedsary вывод seds при использовании опции -e?
  • Попытка grep url из источника html в .txt-файле с помощью sed
  • Изменить значение в таблице
  • Обработка текста для извлечения полей структуры
  • awk, вырезать символы из подстроки
  • awk или sed в нижнем регистре / в верхнем регистре только один символ в строке?
  • Как отображать каждый день месяца в отдельной строке с помощью tr, sed и cal
  • 2 Solutions collect form web for “заменить содержимое одного поля на основе содержимого в другом поле”

    Вы могли бы сделать это несколько загадочно с помощью вложенных условных операторов?: (Aka trernary operator)

     awk '{$2 = $1 ~ /-01$/? 2: $1 ~ /-99$/? 1: $1; print}' input PE01-02-01 2 PE01-02-99 1 PE01-03-01 2 PE01-03-99 1 PE01-05-01 2 PE01-05-99 1 

    вперемежку

     awk '{n = split($1, a, "-"); $2 = a[n] == "01" ? 2: a[n] == "99"? 1: a[n]; print}' input 

    Решение Perl:

     perl -ane 'BEGIN { $" = "\t" } $F[0] =~ /(..)$/, $F[-1] = { "01" => 2, "99" => 1 }->{$1} || $F[-1]; print "@F\n" ' input_file > output_file 
    • -n читает ввод строки за строкой.
    • -a разбивает каждую строку на пробел на массив @F.
    • $" установлен на вкладку так, чтобы элементы массива были разделены вкладками в двойных кавычках ( "@F" )
    • $F[0] сопоставляется с регулярным выражением, которое извлекает последние два символа в $1
    • $F[-1] , последний столбец, установлен на 2 или 1 на основе $1 . Если $1 – это что-то еще, исходное значение сохраняется.
    Linux и Unix - лучшая ОС в мире.