Используя awk, измените значение столбца, если значения другого столбца соответствуют строке - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть следующий вывод файла:

host1|ip1|LCOS|
host2|ip2|Linux|
hos3|ip3|Linux|DiskStation Manager

, где установлено $4 (DiskStation Manager), $3 должно быть изменено на DiskStation Manager

I пробовал следующее, но ничего не меняется

{ if( $4 ~ /DiskStation Manager/) $3=$4}

1 Ответ

1 голос
/ 03 апреля 2020

Зачем использовать ~, если вы знаете строку заранее? Вы можете сделать буквальное совпадение строк. Также обратите внимание, что в строке совпадения есть опечатка, у Station есть заглавная буква S.

Ниже приведена упрощенная версия вашей попытки без явного условия if внутри части действия {..}. Преимущество этого состоит в том, чтобы игнорировать обработку любых других строк , а не , содержащих $4 с ожидаемой строкой. {..}1 просто перезапишет вашу строку на основе изменений значений столбцов и разделителей ввода / вывода.

awk -v FS="|" 'BEGIN { OFS = FS } $4 == "DiskStation Manager" { $3 = $4 }1'

Или, если вы используете подход регулярного выражения, поместите якоря вокруг строки, чтобы получить точное совпадение,

$4 ~ /^DiskStation Manager$/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...