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

Вы можете

awk '{$1=""; print (NF==4)?$0:$2; exit}' OFS= infile

Тернарный оператор условия (NF==4)?$0:$2проверяет, было ли N число F полей равным 4 (, когда поля разделены пробелами(awk по умолчанию FS )), затем напечатайте всю строку $0после того, как мы разделим первое поле $1="", иначе :напечатайте файл #2 $2.

1
28.03.2020, 13:31
1 ответ

Вы можете выполнить такую ​​замену, используя \=специальное выражение замены. Подробности см. в :help sub-replace-special, но вот как может работать эта конкретная замена:

%s/\d\+/\=str2nr(submatch(0)) > 8 ? str2nr(submatch(0)) + 2 : submatch(0)

В замещающей части команды :substitute, после \=, submatch(0)дает вам полное совпадение. Глобальная функция str2nrпреобразует это в число.

Если вы хотите, чтобы логика была более читаемой, вы можете извлечь ее в функцию:

function! IncrementNumber(number_string)
  let number = str2nr(a:number_string)
  if number > 8
    let number += 2
  endif

  return number
endfunction

Вы можете поместить это в свой .vimrcи настроить его, установить пороговое значение 8в качестве параметра и т. д., а затем вызвать это в файле:

%s/\d\+/\=IncrementNumber(submatch(0))
1
19.03.2021, 02:32

Теги

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